網(wǎng)站首頁 編程語言 正文
1、Redis配置修改
事件通過 Redis 的訂閱與發(fā)布功能(pub/sub)來進(jìn)行分發(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ù)據(jù)失效事件,進(jìn)行后續(xù)數(shù)據(jù)處理
*
* @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過期的事件通知,當(dāng)key過期時(shí),會發(fā)布過期事件;我們定義key過期事件的監(jiān)聽器,當(dāng)key過期時(shí),就能收到回調(diào)通知。
注意:
1)由于Redis key過期刪除是定時(shí)+惰性,當(dāng)key過多時(shí),刪除會有延遲,回調(diào)通知同樣會有延遲。
2)回調(diào)通知是一次性的,沒有ack機(jī)制,若收到通知后處理失敗,將不再收到通知。
3)回調(diào)通知只能拿到key,拿不到value。
使用場景:
1)可以實(shí)現(xiàn)延時(shí)隊(duì)列
消息作為key,將需要延遲的時(shí)間設(shè)置為key的TTL,當(dāng)key過期時(shí),在監(jiān)聽器收到通知,達(dá)到延遲的效果。
原文鏈接:https://blog.csdn.net/god_sword_/article/details/131508245
- 上一篇:沒有了
- 下一篇:沒有了
相關(guān)推薦
- 2022-02-01 uniapp 開發(fā)h5 優(yōu)化加載速度
- 2022-08-21 python深度學(xué)習(xí)tensorflow入門基礎(chǔ)教程示例_python
- 2022-08-26 詳解Python中元組的三個(gè)不常用特性_python
- 2022-01-05 npm install 報(bào)錯(cuò):npm ERR! code EPERM npm ERR! syscal
- 2022-04-02 ?Python錯(cuò)誤與異常處理_python
- 2022-11-02 解析C/C++?Capstone?引擎源碼編譯問題_C 語言
- 2023-04-11 Python單個(gè)項(xiàng)目列表轉(zhuǎn)換為整數(shù)的實(shí)現(xiàn)_python
- 2022-07-21 centos docker容器優(yōu)化清理磁盤空間以及內(nèi)存占用
- 欄目分類
-
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支