redis过期通知

时间:2024-05-31 09:19:28
首先启用
登陆redis-cli,输入命令:config set notify-keyspace-events Ex

订阅的key [email protected]<db>__:expired 这个格式是固定的,db代表的是数据库的编号,由于订阅开启之后这个库的所有key过期时间都会被推送过来,所以最好单独使用一个数据库来进行隔离。可以使用redis来处理定时任务一种思路。

1.启用redis通知功能,并订阅过期的key,等待接收过期的key相关数据

redis过期通知

2.设置键值对及过期时间
redis过期通知

3.步骤2设置5秒过期时间后,步骤1窗口接收到过期的key test
redis过期通知


spring中订阅redis键值过期消息通知


<!-- 设置redis消息订阅(方式1) -->
<!--<bean id="listener" class="com.xlhy.new_agent.controller.DefaultMessageDelegate" />
<redis:listener-container connection-factory="jedisConnFactory">
<redis:listener ref="listener" method="handleMessage" topic="[email protected]__:expired" />
</redis:listener-container>-->
<!-- 设置redis消息订阅(方式2) -->
<beanid="messageListener"
class="org.springframework.data.redis.listener.adapter.MessageListenerAdapter">
<constructor-arg>
<beanclass="com.xlhy.new_agent.controller.DefaultMessageDelegate"/>
</constructor-arg>
</bean>
<beanid="redisContainer"class="org.springframework.data.redis.listener.RedisMessageListenerContainer">
<propertyname="connectionFactory"ref="jedisConnectionFactory"/>
<propertyname="messageListeners">
<map>
<entrykey-ref="messageListener">
<list>
<beanclass="org.springframework.data.redis.listener.ChannelTopic">
<constructor-argvalue="[email protected]__:expired"/>
</bean>
</list>
</entry>
</map>
</property>
</bean>

//订阅过期key,监听过期key
public classDefaultMessageDelegate {
public staticLoggerlogger= LogManager.getLogger(DefaultMessageDelegate.class.getName());
public voidhandleMessage(String message) {
logger.info("key过期了:"+ message);
}
}