當前位置:
首頁 > 知識 > redis緩存過期策略,監聽redis緩存

redis緩存過期策略,監聽redis緩存

場景:

redis緩存中的緩存過期了,但是還需要用到他,然而如果設置緩存為永不過期的話,數據會越堆越多,嚴重佔用空間。所以需要對過期緩存進行監聽。在緩存過期的時候進行處理。如果還需要用到就重新載入緩存,用不到了可以不用處理。解決了有用緩存過期的尷尬,又不會造成數據堆積。

過期事件通過Redis的訂閱與發布功能(pub/sub)來進行分發。

配置文件

而對超時的監聽呢,並不需要自己發布,只有修改配置文件redis.conf中的:notify-keyspace-events Ex,默認為notify-keyspace-events ""

# K 鍵空間通知,以__keyspace@<db>__為前綴

# E 鍵事件通知,以__keysevent@<db>__為前綴

# g del , expipre , rename 等類型無關的通用命令的通知, ...

# $ String命令

# l List命令

# s Set命令

# h Hash命令

# z 有序集合命令

# x 過期事件(每次key過期時生成)

# e 驅逐事件(當key在內存滿了被清除時生成)

# A g$lshzxe的別名,因此」AKE」意味著所有的事件

監聽器:

package connect.listen;

import org.springframework.data.redis.connection.MessageListener;

import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;

import org.springframework.data.redis.listener.PatternTopic;

import org.springframework.data.redis.listener.RedisMessageListenerContainer;

import org.springframework.data.redis.listener.Topic;

/**

* @author wm

*/

public class KeyExpirationEvent5MessageListener extends KeyExpirationEventMessageListener {

private static final Topic KEYEVENT5_EXPIRED_TOPIC = new PatternTopic("__keyevent@*__:expired");

/**

* Creates new {@link MessageListener} for {@code __keyevent@*__:expired} messages.

*

* @param listenerContainer must not be {@literal null}.

*/

public KeyExpirationEvent5MessageListener(RedisMessageListenerContainer listenerContainer) {

super(listenerContainer);

}

@Override

public void doRegister(RedisMessageListenerContainer listenerContainer) {

listenerContainer.addMessageListener(this, KEYEVENT5_EXPIRED_TOPIC);

}

}

過期監聽的管道默認是__keyevent@0__:expired,@後面的0表示第幾個資料庫,redis默認的資料庫是0~15一共16個資料庫,根據需求修改@後的數字。expired監聽過期redis,可以換成*,監聽所有。

配置bean:

@Bean

public RedisMessageListenerContainer container(JedisConnectionFactory jedisConnectionFactory, ApplicationContext context) {

RedisMessageListenerContainer container = new RedisMessageListenerContainer();

container.setConnectionFactory(jedisConnectionFactory);

KeyExpirationEvent5MessageListener listener = new KeyExpirationEvent5MessageListener(container);

listener.doRegister(container);

listener.setApplicationEventPublisher(context);

return container;

}

監聽:

@EventListener(classes = RedisKeyExpiredEvent.class)

@Override

public void event(RedisKeyExpiredEvent event) {

String expiredKey = new String(event.getSource());

System.out.println(expiredKey);

//expiredKey監聽到的過期redis,根據業務要求進行操作

}

啟動項目就可以監聽redis了。

---------------------

作者:會寫點代碼的小菜鳥

原文:https://blog.csdn.net/weixin_41497481/article/details/85322794

版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

redis緩存過期策略,監聽redis緩存

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

BS架構和CS架構的比對
React和Vue到底誰更牛?

TAG:程序員小新人學習 |