前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot整合 Redis Key过期反馈 notify-keyspace-event

SpringBoot整合 Redis Key过期反馈 notify-keyspace-event

作者头像
收心
发布2022-01-19 15:01:36
1.5K0
发布2022-01-19 15:01:36
举报
文章被收录于专栏:Java实战博客Java实战博客

notify-keyspace-event 是Redis 2.8 版本之后有的功能,需要手动去开启

开启操作

代码语言:javascript
复制
notify-keyspace-events ""

更变为 

notify-keyspace-events "Ex"

设置完成后,重启Redis!

开启Redis支持Key失效事件后,就可以用代码去订阅这个事件了!

添加Maven依赖

代码语言:javascript
复制
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

弄一个Redis 配置类

代码语言:javascript
复制
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
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;

/**
 * @author : zanglikun
 * @date : 2021/10/20 11:47
 * @Version: 1.0
 * @Desc : Redis 配置类,用于Redis的Key失效的事件监听。
 */
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {

    @Autowired
    RedisConnectionFactory redisConnectionFactory;

    /*
        这里不能丢,有了这个Bean才能又Key失效事件的监听
     */
    @Bean
    public RedisMessageListenerContainer redisMessageListenerContainer(){
        RedisMessageListenerContainer redisMessageListenerContainer = new RedisMessageListenerContainer();
        redisMessageListenerContainer.setConnectionFactory(redisConnectionFactory);
        return redisMessageListenerContainer;
    }
}

添加一个组件

代码语言:javascript
复制
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;

/**
 * @author : zanglikun
 * @date : 2021/10/20 11:50
 * @Version: 1.0
 * @Desc : Redis的Key 过期监听时间
 */
@Component
public class RedisKeyExpiration extends KeyExpirationEventMessageListener {

    public RedisKeyExpiration(RedisMessageListenerContainer listenerContainer) {
        super(listenerContainer);
    }

    // 这是继承KeyExpirationEventMessageListener 主动重写的方法,用于处理当监听到了Key失效的时间
    @Override
    public void onMessage(Message message, byte[] pattern) {
        super.onMessage(message, pattern);
        System.out.println("当前失效的Key是:"+message);
        // TODO 你可以正常执行你需要的代码逻辑!
    }
}

搞定

开始测试

代码语言:javascript
复制
    @Test
    public void testRedisKeyExpire() {
        for (int i = 0; i < 1000; i++) {
            redisTemplate.opsForValue().set("Key_"+i, "Value_"+i, 10, TimeUnit.SECONDS);
        }
        System.out.println("执行成功");
    }

控制台输出

至于乱码,很简单,RedisTemplate字符编码与序列化的时候有问题,自己重新弄一个RedisConfig并追加本文的内容即可RedisConfig的Bean即可!!!

特殊说明: 解决问题的光鲜,藏着磕Bug的痛苦。 万物皆入轮回,谁也躲不掉! 以上文章,均是我实际操作,写出来的笔记资料,不会出现全文盗用别人文章!烦请各位,请勿直接盗用!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 开启操作
  • 开启Redis支持Key失效事件后,就可以用代码去订阅这个事件了!
  • 开始测试
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档