1、Redis配置修改
事件通過 Redis 的訂閱與發(fā)布功能(pub/sub)來進行分發(fā), 故需要開啟 redis 的事件監(jiān)聽與發(fā)布
修改 redis.conf 文件(Windows上是redis.windows.conf和redis.windows-service.conf)
notify-keyspace-events Ex
2、 redis的配置類開啟 redis過期監(jiān)聽
/**
* 開啟 redis過期監(jiān)聽
* @param connectionFactory
* @return
*/
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
return container;
}
3、定義 key過期監(jiān)聽器,繼承 KeyExpirationEventMessageListener
@Slf4j
@Component
public class RedisListener extends KeyExpirationEventMessageListener {
public RedisListener(RedisMessageListenerContainer listenerContainer) {
super(listenerContainer);
}
/**
* 針對redis緩存數(shù)據失效事件,進行后續(xù)數(shù)據處理
*
* @param message
* @param pattern
*/
@Override
public void onMessage(Message message, byte[] pattern) {
/** key ,會把key返回,而不會將value返回*/
String expiredKey = message.toString();
log.info("過期緩存key:" + expiredKey);
try {
//登陸信息過期 若expiredKey以login開始則打印log
if (expiredKey.startsWith("login")){
log.info("---------redis 過期緩存處理");
}
} catch (Exception e) {
log.info("---------redis 過期緩存處理 異常---------");
e.printStackTrace();
}
}
}
通過開啟key過期的事件通知,當key過期時,會發(fā)布過期事件;我們定義key過期事件的監(jiān)聽器,當key過期時,就能收到回調通知。
注意:
1)由于Redis key過期刪除是定時+惰性,當key過多時,刪除會有延遲,回調通知同樣會有延遲。
2)回調通知是一次性的,沒有ack機制,若收到通知后處理失敗,將不再收到通知。
3)回調通知只能拿到key,拿不到value。文章來源:http://www.zghlxwxcb.cn/news/detail-526190.html
使用場景:
1)可以實現(xiàn)延時隊列
消息作為key,將需要延遲的時間設置為key的TTL,當key過期時,在監(jiān)聽器收到通知,達到延遲的效果。文章來源地址http://www.zghlxwxcb.cn/news/detail-526190.html
到了這里,關于springboot監(jiān)聽Redis 緩存過期(Key 失效)事件的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!