redis过期通知

首先启用
登陆redis-cli,输入命令: config set notify-keyspace-events Ex

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

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

redis过期通知_第1张图片

2.设置键值对及过期时间
redis过期通知_第2张图片

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


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


< bean id ="messageListener"
class ="org.springframework.data.redis.listener.adapter.MessageListenerAdapter" >
< constructor-arg >
< bean class ="com.xlhy.new_agent.controller.DefaultMessageDelegate" />
constructor-arg >
bean >
< bean id ="redisContainer" class ="org.springframework.data.redis.listener.RedisMessageListenerContainer" >
< property name ="connectionFactory" ref ="jedisConnectionFactory" />
< property name ="messageListeners" >
< map >
< entry key-ref ="messageListener" >
< list >
< bean class ="org.springframework.data.redis.listener.ChannelTopic" >
< constructor-arg value ="__keyevent@0__:expired" />
bean >
list >
entry >
map >
property >
bean >

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

你可能感兴趣的:(redis)