SpringBoot 監(jiān)聽Redis鍵過期事件(過期監(jiān)聽)
介紹
Redis 鍵過期事件是 Redis 中非常有用的功能,可以在鍵過期時觸發(fā)事件通知。這對于緩存失效、會話管理、定時任務(wù)等場景非常有用。
Redis配置
Redis 默認(rèn)是沒有啟用鍵過期事件通知的,你需要通過配置來啟用這個功能。可以通過修改 redis.conf 文件或者使用 CONFIG SET 命令來啟用鍵過期事件通知。
notify-keyspace-events Ex
依賴
<!-- 操作redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
配置文件
spring:
redis:
host: localhost
port: 6379
#password: 用的本機(jī)的redis,并且我沒有設(shè)置redis密碼
database: 0
lettuce:
pool:
# 最大阻塞等待時間,負(fù)數(shù)表示沒有限制
max-wait: -1
# 連接池中的最大空閑連接
max-idle: 5
# 連接池中的最小空閑連接
min-idle: 0
# 連接池中最大連接數(shù),負(fù)數(shù)表示沒有限制
寫入鍵
@RestController
@RequiredArgsConstructor
public class BasicController {
private final StringRedisTemplate stringRedisTemplate;
@GetMapping("/hello")
public String hello() {
// 設(shè)置鍵值對,并指定過期時間為 10 秒
stringRedisTemplate.opsForValue().set("product:123", "dpc", Duration.ofSeconds(5));
// 獲取值
String str = stringRedisTemplate.opsForValue().get("name");
System.out.println("Value: " + str);
return str;
}
}
配置監(jiān)聽器
@Configuration
public class RedisListenerConfig {
@Bean
public RedisMessageListenerContainer redisMessageListenerContainer(RedisConnectionFactory connectionFactory) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
return container;
}
@Bean
public OrderKeyExpirationListener orderKeyExpirationListener(RedisMessageListenerContainer container) {
// 配置監(jiān)聽器只監(jiān)聽 `order:*` 鍵
OrderKeyExpirationListener listener = new OrderKeyExpirationListener(container);
container.addMessageListener(listener, new ChannelTopic("__keyevent@0__:expired"));
return listener;
}
@Bean
public SessionKeyExpirationListener sessionKeyExpirationListener(RedisMessageListenerContainer container) {
// 配置監(jiān)聽器只監(jiān)聽 `session:*` 鍵
SessionKeyExpirationListener listener = new SessionKeyExpirationListener(container);
container.addMessageListener(listener, new ChannelTopic("__keyevent@0__:expired"));
return listener;
}
@Bean
public ProductKeyExpirationListener productKeyExpirationListener(RedisMessageListenerContainer container) {
// 配置監(jiān)聽器只監(jiān)聽 `product:*` 鍵
ProductKeyExpirationListener listener = new ProductKeyExpirationListener(container);
container.addMessageListener(listener, new ChannelTopic("__keyevent@0__:expired"));
return listener;
}
}
按KEY監(jiān)聽
監(jiān)聽session鍵
@Slf4j
public class SessionKeyExpirationListener extends KeyExpirationEventMessageListener {
public SessionKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
super(listenerContainer);
}
@Override
public void onMessage(Message message, byte[] pattern) {
String key = message.toString();
if (key.startsWith("session:")) {
log.info("會話【" + key + "】已過期");
// 處理會話超時的邏輯
}
}
}
監(jiān)聽product鍵
@Slf4j
public class ProductKeyExpirationListener extends KeyExpirationEventMessageListener {
public ProductKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
super(listenerContainer);
}
@Override
public void onMessage(Message message, byte[] pattern) {
String key = message.toString();
if (key.startsWith("product:")) {
log.info("產(chǎn)品【" + key + "】已過期");
// 處理產(chǎn)品相關(guān)的超時邏輯
}
}
}
監(jiān)聽order鍵
public class OrderKeyExpirationListener extends KeyExpirationEventMessageListener {
public OrderKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
super(listenerContainer);
}
@Override
public void onMessage(Message message, byte[] pattern) {
String key = message.toString();
System.out.println(123);
if (key.startsWith("order:")) {
// 處理訂單相關(guān)的超時邏輯
}
}
}到此這篇關(guān)于SpringBoot 監(jiān)聽Redis鍵過期事件(過期監(jiān)聽)的文章就介紹到這了,更多相關(guān)SpringBoot 監(jiān)聽Redis過期內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java并發(fā)(Runnable+Thread)實(shí)現(xiàn)硬盤文件搜索功能
這篇文章主要介紹了Java并發(fā)(Runnable+Thread)實(shí)現(xiàn)硬盤文件搜索,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01
Java實(shí)現(xiàn)鼠標(biāo)拖拽移動界面組件
在Java中,F(xiàn)rame或者JFrame自身已經(jīng)實(shí)現(xiàn)了鼠標(biāo)拖拽標(biāo)題欄移動窗口的功能。但是Jframe的樣式實(shí)在無法令人滿意,那你又該怎么實(shí)現(xiàn)鼠標(biāo)拖拽移動窗口的目的呢?今天我們來探討下2014-09-09
Gradle下如何搭建SpringCloud分布式環(huán)境
這篇文章主要介紹了Gradle下如何搭建SpringCloud分布式環(huán)境問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-05-05
通過FeignClient調(diào)用微服務(wù)提供的分頁對象IPage報錯的解決
這篇文章主要介紹了通過FeignClient調(diào)用微服務(wù)提供的分頁對象IPage報錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03

