1、redis 开启key过期通知
修改redis server 配置文件,开启keyt过期听通知配置
notify-keyspace-events Ex
2、 key过期Listener
/** * 监听所有db的过期事件__keyevent@*__:expired" */@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {@Autowiredprivate IUserInfoService userInfoService;public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) { super(listenerContainer);}
/** * 针对redis数据失效事件,进行数据处理 */ @Override public void onMessage(Message message, byte[] pattern) { //用户做自己的业务处理即可,注意message.toString()可以获取失效的key String expiredKey = message.toString(); if (expiredKey.startsWith(Constants.USER_LEVEL)) { //如果是user_level开头的key,进行处理 //将用户等级更新为原有等级 String[] keyParms = expiredKey.split("_"); try { userInfoService.updateUserInfoData(Integer.parseInt(keyParms[2])); } catch (Exception e) { e.printStackTrace(); } }}
3.监听配置类
/** * redis监听配置类 */@Configurationpublic class RedisListenerConfig { @Bean RedisMessageListenerContainer container(RedisConnectionFactory redisConnectionFactory) { RedisMessageListenerContainer container = new RedisMessageListenerContainer(); container.setConnectionFactory(redisConnectionFactory); //container.addMessageListener(new RedisExpiredListener(), new PatternTopic("__keyevent@0__:expired")); return container; }}