一. 开启Redis key过期提醒
-
方式一:修改配置文件
redis.conf
# 默认 notify-keyspace-events "" notify-keyspace-events Ex
-
方式二:命令行开启
CONFIG SET notify-keyspace-events Ex CONFIG GET notify-keyspace-events
二. notify-keyspace-events
notify-keyspace-events 选项的默认值为空
notify-keyspace-events 的参数可以是以下字符的任意组合, 它指定了服务器该发送哪些类型的通知。
字符 | 发送的通知 |
---|---|
K | 键空间通知,所有通知以 keyspace@ 为前缀 |
E | 键事件通知,所有通知以 keyevent@ 为前缀 |
g | DEL 、 EXPIRE 、 RENAME 等类型无关的通用命令的通知 |
$ | 字符串命令的通知 |
l | 列表命令的通知 |
s | 集合命令的通知 |
h | 哈希命令的通知 |
z | 有序集合命令的通知 |
x | 过期事件:每当有过期键被删除时发送 |
e | 驱逐(evict)事件:每当有键因为 maxmemory 政策而被删除时发送 |
A | 参数 g$lshzxe 的别名 |
三. Coding
-
初始化一个
Spring Boot
项目 -
pom.xml
dependencies> dependency> groupId>org.springframework.bootgroupId> artifactId>spring-boot-starter-da服务器托管网ta-redisartifactId> dependency> dependency> groupId>org.projectlombokgroupId> artifactId>lombokartifactId> dependency> dependencies>
-
定义配置类`RedisListenerConfig
@Configuration public class RedisListenerConfig { @Bean RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) { RedisMessageListenerContainer container = new RedisMessageListenerContainer(); container.setConnectionFactory(connectionFactory); return container; } }
-
定义监听器 实现
KeyExpirationEventMessageListener
接口
查看源码发现,该接口监听所有db的过期事件keyevent@*:expired"
定义Status1ExpirationListener
监听状态1到期@Slf4j @Component public class Status1ExpirationListener extends KeyExpirationEventMessageListener { public Status1ExpirationListener(RedisMessageListenerContainer listenerContainer) { super(listenerContainer); } @Autowired private StringRedisTemplate stringRedisTemplate; @Override public void onMessage(Message message, byte[] pattern) { // message.toString()可以获取失效的key String expiredKey = message.toString(); // 业务处理 } }
定义
Status2ExpirationListener
监听状态2到期@Slf4j @Component public class Status2ExpirationListener extends KeyExpirationEventMessageListener { public Status2ExpirationListener(RedisMessageListenerContainer listenerContainer) { super(listenerContaine服务器托管网r); } @Override public void onMessage(Message message, byte[] pattern) { // message.toString()可以获取失效的key String expiredKey = message.toString(); // 业务处理 } }
四. 参考
Redis keyspace notifications
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
用ul和li模拟一个可以点击的日历,因为需求是如果某天有事件则需要自动标红,效果图如下 注意!!!这处因为需要和时间选择器联动 ,所以把这个页面封装成一个组件,代码 一 二 三 四 五 六 日 {{ dateFormat(item.day).split(“-“…