记录SpringMVC集成Redis实现过期key回调
- 将redis的maven依赖加入进来
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.7.1.RELEASE</version>
</dependency>
- 到redis的配置文件中将下列代码注释放开
notify-keyspace-events Ex
- 添加redis监听配置类
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
@Configuration
public class RedisListenerConfig {
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
return container;
}
}
- 监听过期key,执行回调方法
@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {
public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
super(listenerContainer);
}
/**
* 重写onMessage方法,当Redis中的Key过期时会执行该方法
*/
@Override
public void onMessage(Message message, byte[] pattern) {
//过期的key
String key = new String(message.getBody(), StandardCharsets.UTF_8);
//业务逻辑处理
}
}
注①:key过期后将无法获取对应的value值,也无法获取到该key设置的过期时间,如需要用到这些参数可以在添加时对key做一个备份,备份key不设置过期时间(将value及过期时间等需要用到的参数放入value中),在过期key执行回调时,将备份key获取到,即可拿到想要的value值,然后将备份key手动删除。
注②:在SpringMVC添加Redis依赖时,注意版本冲突,以及redis的版本是否支持对过期key的监听。
测试发现1.7版本以上才支持对过期key的监听回调。