微信企业号会议助手---redis的应用

前面已经搭建好了大概的项目结构,现在开始写一些必要的工具类,今天先讲讲我所用到的redis应用。redis在一些项目中有很多种应用方式,我今天就讲讲spring的StringRedisTemplate。在这个项目中redis用到的功能就是缓存下微信的一些信息。所以可以看做是当map集合来用差不多。
下面就开始介绍下StringRedisTemplate的API:

stringRedisTemplate.opsForValue().set("test", "100",60*10,TimeUnit.SECONDS);//向redis里存入数据和设置缓存时间  

stringRedisTemplate.boundValueOps("test").increment(-1);//val做-1操作  

stringRedisTemplate.opsForValue().get("test")//根据key获取缓存中的val  

stringRedisTemplate.boundValueOps("test").increment(1);//val +1  

stringRedisTemplate.getExpire("test")//根据key获取过期时间  

stringRedisTemplate.getExpire("test",TimeUnit.SECONDS)//根据key获取过期时间并换算成指定单位  

stringRedisTemplate.delete("test");//根据key删除缓存  

stringRedisTemplate.hasKey("546545");//检查key是否存在,返回boolean值  

stringRedisTemplate.opsForSet().add("red_123", "1","2","3");//向指定key中存放set集合  

stringRedisTemplate.expire("red_123",1000 , TimeUnit.MILLISECONDS);//设置过期时间  

stringRedisTemplate.opsForSet().isMember("red_123", "1")//根据key查看集合中是否存在指定数据  

stringRedisTemplate.opsForSet().members("red_123");//根据key获取set集合  

再讲下spring的redis配置:

<!-- redis配置 -->
    <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxIdle" value="${redis.maxIdle}" /> 
        <property name="maxTotal" value="${redis.maxTotal}" /> 
        <property name="maxWaitMillis" value="${redis.maxWait}" /> 
        <property name="testOnBorrow" value="${redis.testOnBorrow}" /> 
    </bean> 

    <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        <property name="hostName" value="${redis.host}" />
        <property name="port" value="${redis.port}" />
        <!-- <property name="password" value="${redis.pass}" /> -->
        <property name="poolConfig" ref="poolConfig" />
    </bean> 

    <bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">
        <property name="enableTransactionSupport" value="false"/>
        <property name="connectionFactory"   ref="connectionFactory" /> 
    </bean>
    <bean id="redisUtil" class="com.supcon.mo.util.RedisUtil">
        <property name="redisTemplate"   ref="redisTemplate" /> 
    </bean>

这个在上一章搭建后端架构的时候就讲过,这里再声明一下,org.springframework.data.redis.core.StringRedisTemplate是spring的自带的redis模板。
bean id=”redisUtil”将这个模板传入com.supcon.mo.util.RedisUtil这个类。不过这些都要在spring启动的时候才能用。
下面来讲一个工具类的方法案例:

public static RedisTemplate<String, Object> redisTemplate;
public static void setStringByTime(String key,Object obj, Long timeout, TimeUnit unit) {
    if (obj == null) {
        return;
    }

    if (timeout != null) {
        redisTemplate.opsForValue().set(key, obj, timeout, unit);
    } else {
        redisTemplate.opsForValue().set(key, obj);
    }
}  
public RedisTemplate<String, Object> getRedisTemplate() {
    return redisTemplate;
}

public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) {
    this.redisTemplate = redisTemplate;
}

这里注意一下,很多人都会犯的一个小错误,IOC对象注入元素的时候必须要在bean中写set,get方法。
我这里写的是一个存入redis的键值对,设定一定时间的有效期。

timeout写数字,unit写单位。如TimeUnit.SECONDS代表秒。

当然这样是无法写main方法测试的,需要用junit来测试。首先要导入

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath:spring-servlet-config.xml"}) 

这两个注释,能够调用的IOC容器。
然后在写的方法前加@test来测试,如:

@test
public void say(){
    ....一大堆测试代码,当main方法来写。
}

因为这个工具类在spring的配置文件中注册了,所以再其他类中调用的时候只要采用@Autowired标签注入就好了。

当然这里还有一个疑问,如果是要在其他静态工具类中引用怎么办?
下面我讲下解决办法:
方法一:

@Autowired<br>//注意这里非静态
private RedisUtil redisUtil;
private static LogUtil logUtil;

@PostConstruct //@PostConstruct修饰的方法会在服务器加载Servle的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行
public void init() { 
    logUtil = this; 
    logUtil.redisUtil = this.redisUtil; 
} 
public AdminLogService getUserService() {
    return logService;
}
public void setUserService(rRdisUtil redisUtil) {
    this.redisUtil= redisUtil;
}

下面调用的时候直接用logUtil.redisUtil.方法来调用。

方法二:
去掉redisTemplate的注入。直接导入静态模板。

public static RedisTemplate<String, Object> redisTemplate;

综上都是个人项目对redis的应用,没有研究太深。比如一些redis的原理啊,优点啊。我虽然看过,也清楚一些,但感觉讲的不够专业就不讲了,免得误导各位。

一起加油!!!

有什么不足之处,或者错误的欢迎指点,本人每天保持工作日早上更新。

猜你喜欢

转载自blog.csdn.net/hjucook1988/article/details/70168109