SpringBoot怎么整合Redis,监听Key过期事件?
一、修改 Redis 配置文件
- 1、在 Redis 的安装目录
- 2、找到 redis.windows.conf 文件 , 搜索 “notify-keyspace-events”
文章插图
修改为 “notify-keyspace-events Ex” , 这样我们的 Redis 就支持 key 过期事件的监听了
二、注入redisMessageListenerContainer注意:本偏文章衔接与上篇文章:【SpringBoot】三十四、SpringBoot整合Redis实现序列化存储Java对象 , 其中的配置信息本篇文章不在赘述
- 1、还是在 RedisConfig.java 中注入一个 redisMessageListenerContainer 的Bean 用于监听
@BeanRedisMessageListenerContainer redisMessageListenerContainer(RedisConnectionFactory connectionFactory) {RedisMessageListenerContainer container = new RedisMessageListenerContainer();// 监听所有库的key过期事件container.setConnectionFactory(connectionFactory);return container;}
- 2、创建监听类RedisKeyExpirationListener
package com.zyxx.common.redis;import lombok.extern.slf4j.Slf4j;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;/** * 监听 Redis key 过期事件 * * @Author Lizhou */@Slf4j@Componentpublic class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {public RedisKeyExpirationListener(RedisMessageListenerContainer redisMessageListenerContainer) {super(redisMessageListenerContainer);}/*** 针对 redis 数据失效事件 , 进行数据处理*/@Overridepublic void onMessage(Message message, byte[] pattern) {// 拿到keylog.info("监听Redis key过期 , key:{} , channel:{}", message.toString(), new String(pattern));}}
我们可以监听到过期的 key 的信息 , 以及通道的信息- 3、操作 API
在 RedisUtils 中加入如下操作```java/** * 写入数据 , 并设置过期时间 */public boolean set(final String key, Object value, long time) {if (StringUtils.isBlank(key)) {return false;}try {template.opsForValue().set(key, value, time, TimeUnit.SECONDS);log.info("存入redis成功 , key:{} , value:{}", key, value);return true;} catch (Exception e) {log.error("存入redis失败 , key:{} , value:{}", key, value);e.printStackTrace();}return false;}
借助此方法 , 我们可以向 Redis 中存入数据 , 并设置过期时间 , 单位为:秒(S)``三、测试
- 1、测试用例
package com.zyxx.redistest;import com.zyxx.redistest.common.RedisUtils;import com.zyxx.redistest.common.UserInfo;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import java.util.Date;@SpringBootTestclass RedisTestApplicationTests {@Autowiredprivate RedisUtils redisUtil;@Testvoid contextLoads() {UserInfo userInfo = new UserInfo();userInfo.setId(1);userInfo.setName("jack");userInfo.setCreateTime(new Date());// 放入redis , 并设置过期时间为5秒redisUtil.set("user", userInfo, 5);}}
我们向 Redis 中存入了一个 key 为 “user” , value 为 UserInfo 对象的数据 , 并设置了过期时间为 5 秒注意:在测试之前 , 我们需要启动我们的项目 , 才能将 Bean 注入到我们的容器中 , 监听事件才会生效
- 2、测试结果可以看出我们的数据存入 Redis 成功
文章插图
触发了 key 过期事件 , 这时候 , 我们拿到过期的 key 就可以对应的做一些业务处理了
作者:Asurplus、
原文链接:
- 看不上|为什么还有用户看不上华为Mate40系列来看看内行人怎么说
- 行业|现在行业内客服托管费用是怎么算的
- 华为|台积电、高通、华为、小米接连宣布!美科技界炸锅:怎么会这样!
- 截长|手机截图怎么截长图
- 精英|业务流程图怎么绘制?销售精英的经验之谈
- 助力|上班族的小妙招:怎么弄pdf签名?编辑器来助力
- 收费|企业家商业访谈节目有哪些?怎么收费?
- 涉嫌|李佳琦店铺被罚是怎么回事?店内洗发水涉嫌虚假宣传
- 究竟|免费的OPPO R1电视究竟怎么样
- 恢复|电脑文件不小心被删除了怎么恢复?文件恢复可以用这招解决!