今天学习了同事在程序中使用redis做缓存的代码,是将查询出来的列表放在缓存里,以便于下次查询更加速度。比较常用到,整理一下下。
一、在xml文件中配置
<beans profile="redis">
<bean class="cn.com.jdls.foundation.cache2.plugcache.redis.RedisBean" >
<property name="jedisConnectionFactory" ref="mhRedisConnectionFactory"></property>
</bean>
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxTotal" value="${mh.redis.maxTotal}"></property>
<property name="maxIdle" value="${mh.redis.maxIdle}"></property>
<property name="maxWaitMillis" value="${mh.redis.maxWait}"></property>
<property name="minEvictableIdleTimeMillis" value="300000"></property>
<property name="numTestsPerEvictionRun" value="3"></property>
<property name="timeBetweenEvictionRunsMillis" value="60000"></property>
</bean>
<bean id="mhRedisConnectionFactory"
class="cn.com.jdls.foundation.cache2.plugcache.redis.JedisConnectionBeanFactory">
<property name="redisMode" value="${mh.redis.model}"></property>
<property name="hostname" value="${mh.redis.ip}"></property>
<property name="port" value="${mh.redis.port}"></property>
<property name="password" value="${mh.redis.password}"></property>
<property name="poolConfig" ref="jedisPoolConfig"></property>
<property name="mastername" value="${mh.redis.masterName}"></property>
<property name="sentinelnodes" value="${mh.redis.sentinelnodes}"></property>
</bean>
二、在程序中注入bean
private RedisTemplate<String, DbcxBean> redisTemplate;
@Autowired(required = false)
private RedisTemplate<String, DbcxBean> getTemplate(JedisConnectionFactory jedisConnectionBeanFactory) {
RedisTemplate<String, DbcxBean> redisTemplate = new RedisTemplate<String, DbcxBean>();
redisTemplate.setConnectionFactory(jedisConnectionBeanFactory);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new JsonRedisSerializer<DbcxBean>());
redisTemplate.afterPropertiesSet();
this.redisTemplate = redisTemplate;
return redisTemplate;
}
三、使用redis
//设置key
String key = "db-gw_:" + swry_dm + "-" + currentSwrysfdm;
if (!redisTemplate.hasKey(key) || "true".equals(reload)) {
// 清空数据
redisTemplate.delete(key);
List<DbcxBean> list = loadJsgwdb(swry_dm, currentSwrysfdm);
int jsCount = list.size();
List<DbcxBean> list2 = loadWsgwdb(sjswjgdm + "%");
int wsCount = list2.size();
list.addAll(list2);
if (list.isEmpty()) {
page.setTotalCount(0);
page.setResult(list);
return;
}
Collections.sort(list);
page.setJsCount(jsCount);
page.setWsCount(wsCount);
//放到缓存里
redisTemplate.opsForList().rightPushAll(key, list);
}
//从缓存中查出来
ListOperations<String, DbcxBean> listOPs = redisTemplate.opsForList();
page.setResult(listOPs.range(key, page.getStartRow() - 1, page.getEndRow() - 1));
page.setTotalCount(listOPs.size(key));