springboot使用Redis,监听Redis键过期的事件设置与使用代码

我使用的是Windows下的Redis服务,所以一下Redis设置都是在Windows平台进行。

1、修改Redis配置文件

1.1:Windows下的Redis存在两个配置文件

springboot使用Redis,监听Redis键过期的事件设置与使用代码

修改带有service的配置文件才会有效。

打开配置文件,找到下面一行代码:

notify-keyspace-events “”

然后修改配置,如下图配置:

springboot使用Redis,监听Redis键过期的事件设置与使用代码

很简单,替换注释一下就好。

2、重启Redis服务

重启Redis服务有两种方式:

1、直接win+R,打开运行对话框,输入Services.msc,打开服务列表。然后找到Redis服务重启就好了。

2、打开cmd命令窗口,输入下面命令:

redis-server –service-stop

关闭成功!!

3.打开cmd命令窗口,输入下面命令:

redis-server –service-start

springboot使用Redis,监听Redis键过期的事件设置与使用代码

开启成功!!

3、在springboot项目中配置Redis配置

我的项目使用的是springboot2.0.5,所以一下配置适用springboot2.0.5项目,其他版本没试过。

两种方式:

第一种:指定:keyevent@0:expired,监听指定的db键的过期事件。

Redis配置第一步:

/**
 * TODO Redis配置
 * @author zhuzhen
 * @date 16:20 2018/12/18
 */
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {

    /**
     * TODO 监听 Redis键过期事件
     * @author zhuzhen
     * @date 14:38 2018/12/21
     * @param connectionFactory
     * @return org.springframework.data.redis.listener.RedisMessageListenerContainer
     */
    @Bean
    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        container.addMessageListener(new RedisExpiredListener(), new PatternTopic("__keyevent@0__:expired"));
        return container;
    }

}

Redis配置第二步:

实现MessageListener接口:

/**
 * @author zhuzhen
 * @version 1.0
 * @description TODO 自定义Redis过期监听事件
 * @className com.nongcai.rabbitmq.demo.redis.RedisExpiredListener
 * @date 2018/12/21 14:42
 */
public class RedisExpiredListener implements MessageListener {

    @Override
    public void onMessage(Message message, byte[] bytes) {
        // 建议使用: valueSerializer
        byte[] body = message.getBody();
        byte[] channel = message.getChannel();
        //Redis数据的键
        String redisId = new String(body);

        System.out.println("onMessage >> " );
        System.out.println(String.format("channel: %s \n body: %s \n bytes: %s"
                ,new String(channel), new String(body), new String(bytes)));

    }
}

第二种:监听所有的db键的过期事件。

Redis配置第一步:配置监听bean

/**
     * TODO 监听 Redis键过期事件
     * @author zhuzhen
     * @date 14:38 2018/12/21
     * @param connectionFactory
     * @return org.springframework.data.redis.listener.RedisMessageListenerContainer
     */
    @Bean
    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {

        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
//        container.addMessageListener(new RedisExpiredListener(), new PatternTopic("__keyevent@0__:expired"));
        return container;
    }

Redis配置第二步:

/**
 * @author zhuzhen
 * @version 1.0
 * @description TODO 监听所有db的过期事件__keyevent@*__:expired"
 * @className com.nongcai.rabbitmq.demo.redis.RedisKeyExpirationListener
 * @date 2018/12/21 14:39
 */
@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {

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

    @Override
    public void onMessage(Message message, byte[] pattern) {
        // 用户做自己的业务处理即可,注意message.toString()可以获取失效的key
        System.out.println("message>>>  " + message);
        System.out.println("pattern>>>  " + new String(pattern));
        String expiredKey = message.toString();
        System.out.println("Redis的键:" + expiredKey);

    }
}

自此,监听Redis键过期事件配置完成。

spring关于Redis文章地址:https://spring.io/guides/gs/messaging-redis/

Original: https://www.cnblogs.com/zhuzhen/p/10156122.html
Author: 十七年蝉
Title: springboot使用Redis,监听Redis键过期的事件设置与使用代码

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/621588/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 版本控制gitlab

    版本控制gitlab 版本控制gitlab 什么是版本控制gitlab gitlab部署 什么是版本控制gitlab GitLab 是一个用于仓库管理系统的开源项目,使用Git作为…

    数据库 2023年6月14日
    089
  • MySQL之存储引擎、基本数据类型及约束条件

    一、存储引擎 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,…

    数据库 2023年5月24日
    076
  • mysql扫描全表更新状态部分失败

    一直以为mysql是按照主键排序的,实则排序和主键没有关系(不使用 order by 子句)。 然后从 stackoverflow 上查了一下,找到了以下的回答: 没有默认的排序顺…

    数据库 2023年5月24日
    091
  • 2021长安杯wp

    案件背景 2021年4月25日,上午8点左右,警方接到被害人金某报案,声称自己被敲诈数万元;经询问,昨日金某被嫌疑人诱导果聊,下载了某果聊软件,导致自己的通讯录和果聊视频被嫌疑人获…

    数据库 2023年6月11日
    079
  • 深入浅出分析 PriorityQueue

    作者:炸鸡可乐原文出处:www.pzblog.cn 一、摘要 在前几篇文章中,咱们了解到,Queue 的实现类有 ArrayDeque、LinkedList、PriorityQue…

    数据库 2023年6月14日
    098
  • 0x02MySQL权限管理

    0x02MySQL权限管理 工具/原料 MySQL5728,centos7 方法/步骤 1.1 数据库的介绍 你们公司用了哪些数据产品? 请你例举一下你熟悉的数据库产品? 我们公司…

    数据库 2023年6月9日
    076
  • kafka学习

    Kafka概述 Kafka是分布式(点对点模式)(发布-订阅模式)消息系统,由Scala 写成, 它主要用于处理流式数据。本质是基于消息队列缓存数据. Kafka对消息保存时根据T…

    数据库 2023年6月16日
    087
  • [LeetCode]剑指 Offer 17. 打印从1到最大的n位数

    输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。 示例 1: 输入: n = 1输出: [1,2,3…

    数据库 2023年6月9日
    094
  • markdown语法

    特殊字符对照表 点击查看特殊字符对照表 特殊字符 描述 字符代码 空格符 & 逻辑与 < 小于号 大于号 ¥ 人民币 ± 正负号 × 乘号 ÷ 除号 © 版权符号 ®…

    数据库 2023年6月6日
    077
  • 如何把 MySQL 备份验证性能提升 10 倍

    JuiceFS 非常适合用来做 MySQL 物理备份,具体使用参考我们的官方文档。最近有个客户在测试时反馈,备份验证的数据准备( xtrabackup –prepare)过程非常…

    数据库 2023年5月24日
    073
  • 翻译 | Kubernetes 将改变数据库的管理方式

    作者:Álvaro Hernández 当技术决策人考虑在 Kubernetes 上部署数据库时,面临的第一个问题就是:” Kubernetes 有应对有状态服务的能力…

    数据库 2023年5月24日
    0132
  • 设置颜色与画笔

    设置画笔 默认情况下,Graphics绘图类 使用的画笔属性是粗细为I个像素的正方形,而Graphics2D类可以调用 setStroke()方法 设置画笔的属性,如改变线条的粗细…

    数据库 2023年6月16日
    097
  • MySQL索引知识点&面试常见问题

    来源:BiggerBoy作者:北哥原文链接:https://mp.weixin.qq.com/s/fucHvdRK5wRrDfBOo6IBGw 大家好我是北哥,今天整理了MySQL…

    数据库 2023年6月11日
    096
  • Vue(十三)—过滤器filter,filters

    官网:https://cn.vuejs.org/v2/api/#filters https://cn.vuejs.org/v2/api/#Vue-filter 分为全局过滤器和局部…

    数据库 2023年6月16日
    095
  • 做自动化测试选择Python还是Java?

    你好,我是测试蔡坨坨。 今天,我们来聊一聊测试人员想要进阶,想要做自动化测试,甚至测试开发,如何选择编程语言。 自动化测试,这几年行业内的热词,也是测试人员进阶的必备技能,更是软件…

    数据库 2023年6月11日
    0107
  • FastDFS安装和简介详细总结

    1、fastDFS简介 1 FastDFS是用c语言编写的一款开源的分布式文件系统。 2 FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用…

    数据库 2023年6月14日
    0114
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球