1. 修改redisp配置,开启过期事件监听
1
| notify-keyspace-events Ex # 仅监听键过期事件(Ex=Expired events)
|
2. springboot配置监听器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| @Configuration public class RedisConfig { @Bean public RedisMessageListenerContainer container(RedisConnectionFactory factory) { RedisMessageListenerContainer container = new RedisMessageListenerContainer(); container.setConnectionFactory(factory); return container; } }
@Configuration public class RedisConfig { @Bean public RedisMessageListenerContainer container(RedisConnectionFactory factory) { RedisMessageListenerContainer container = new RedisMessageListenerContainer(); container.setConnectionFactory(factory); container.addMessageListener((message, pattern) -> { String key = new String(message.getBody()); if (key.equals("mykey")) { } }, new PatternTopic("__keyspace@0__:mykey")); return container; } }
|
3.监听器实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| @Component public class KeyExpiredListener extends KeyExpirationEventMessageListener { public KeyExpiredListener(RedisMessageListenerContainer listenerContainer) { super(listenerContainer); }
@Override public void onMessage(Message message, byte[] pattern) { String expiredKey = message.toString(); handleExpiredKey(expiredKey);
} }
|
tips:需要注意集群模式下,每个服务都会收到过期事件,所以结合锁机制及数据库状态的二次校验保证监听的可靠性;