适用场景
比如预约成功半小时后提醒;比如当超时15分通知;比如间隔5分钟处理一次等等
配置
- 登录进入
redis-cli
客户端,执行:
config set notify-keyspace-events Ex
- 或者在redis.conf 添加配置:
notify-keyspace-events "Ex" //过期时间监听生效
代码
配置类
package org.springblade.modules.suolide.app.listener;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
/**
* 监听所有的db键的过期事件
*
*/
@Configuration
public class RedisListenerConfig {
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
return container;
}
}
实现类
package org.springblade.modules.suolide.app.listener;
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.stereotype.Component;
@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {
public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
super(listenerContainer);
}
/**
* 针对redis数据失效事件,进行数据处理
*
* @param message
* @param pattern
*/
@Override
public void onMessage(Message message, byte[] pattern) {
// message.toString()可以获取失效的key
String expiredKey = message.toString();
//拿到失效的key做具体的业务处理
System.out.println(expiredKey);
}
}