1,RedisConfigContainer类读取redis配置信息 初始化StringRedisTemplate
package com.game.redis.conf;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
/**
* 配置默认Redis操作实例 到Spring中
*
*/
//@Component
//@PropertySource("classpath:application-test.yml")
//
@Configuration
@EnableCaching
public class RedisConfigContainer extends RedisConfig {
@Value("${spring.redis.redis-container.database}")
private int dbIndex;
@Value("${spring.redis.redis-container.host}")
private String host;
@Value("${spring.redis.redis-container.port}")
private int port;
@Value("${spring.redis.redis-container.password}")
private String password;
@Value("${spring.redis.redis-container.timeout}")
private int timeout;
/**
* 配置redis连接工厂
*
* @return
*/
public RedisConnectionFactory defaultRedisConnectionFactory() {
return createJedisConnectionFactory(dbIndex, host, port, password, timeout);
}
/**
* 配置redisTemplate 注入方式使用@Resource(name="") 方式注入
*
* @return
*/
@Bean(name = "redisTemplateContainer")
public StringRedisTemplate defaultRedisTemplate() {
StringRedisTemplate template = new StringRedisTemplate();
template.setConnectionFactory(defaultRedisConnectionFactory());
template.afterPropertiesSet();
return template;
}
@Bean
public RedisMessageListenerContainer container() {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(defaultRedisConnectionFactory());
return container;
}
}
2 RedisKeyExpirationListener设置监听
package com.game.redis.container;
import org.apache.log4j.Logger;
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.stereotype.Component;
import com.game.service.OutSevice;
@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {
protected final Logger logger = Logger.getLogger(this.getClass());
public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
super(listenerContainer);
}
/**
* 针对redis数据失效事件,进行数据处理
*
* @param message
* @param pattern
*/
@Override
public void onMessage(Message message, byte[] pattern) {
// 用户做自己的业务处理即可,注意message.toString()可以获取失效的key
String expiredKey = message.toString();
logger.info(expiredKey + "消失");
OutSevice.examine(expiredKey);
}
}
3yml配置
redis:
pool:
max-active: -1
max-wait: -1
max-idle: 8
min-idle: 0
redis-container:
database: 3
host:ip
port: 6379
password: pwd
timeout: 0
注意 要选择redis db数据少的数据库进行设置监听 ,延迟低