SpringBoot实现监听Redis key失效事件

laravel 一个小时未付款取消订单-Redis键空间通知过期事件的应用实例 在 PHP对Redis键空间通知过期事件的应用实例  一文中,已经介绍了PHP对Redis键空间通知功能的应用。本文主要介绍laravel中对Redis键空间通知过期事件的应用。 场景:用户下单后一个小时如果没付款就取消掉订单。 要实现这个,有了前文的基础,我们肯定不会只想到crontab定时去做,还会想到用Redis去实现。那么具体该怎么操作?请往下看: 1、先配置一下 .env 文件 ,... 阅读详情

1.需求

处理订单过期自动取消,比如下单30分钟未支付自动更改订单状态

2.方案

可以利用redis天然的key自动过期机制,下单时将订单id写入redis,过期时间30分钟,30分钟后检查订单状态,如果未支付,则进行处理但是key过期了redis有通知吗?答案是肯定的。

3.试验步骤

3.1.开启redis key过期提醒

修改redis相关事件配置。找到redis配置文件redis.conf,查看“notify-keyspace-events”的配置项,如果没有,添加“notify-keyspace-events Ex”,如果有值,添加Ex,相关参数说明如下:

E:keyevent事件,事件以__keyevent@<db>__为前缀进行发布;    
x:过期事件,当某个键过期并删除时会产生该事件; 
3.2.redis测试

打开一个redis-cli ,监控db0的key过期事件

127.0.0.1:6379> PSUBSCRIBE __keyevent@0__:expired
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "__keyevent@0__:expired"
3) (integer) 1

打开另一个redis-cli ,发送定时过期key

127.0.0.1:6379> setex test_key 3 test_value

观察上一个redis-cli ,会发现收到了过期的keytest_key,但是无法收到过期的value test_value

127.0.0.1:6379> PSUBSCRIBE __keyevent@0__:expired
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "__keyevent@0__:expired"
3) (integer) 1
1) "pmessage"
2) "__keyevent@0__:expired"
3) "__keyevent@0__:expired"
4) "test_key"

4.在springboot中使用

4.1.定义监听器

定义监听器,监控__keyevent@0__:expired事件,即db0过期事件。

package com.easygo.listener;

import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.connection.MessageListener;

/**
 * @BelongsProject: easygo
 * @Description: 配置的Redis消息的监听器,获取redis的消息并进行处理
 */
public class RedisMessageListener implements MessageListener {

    /**
     * message:要处理的消息
     * @param message 消息内容
     * @param pattern 获取的频道信息
     */
    @Override
    public void onMessage(Message message, byte[] pattern) {
        byte[] body = message.getBody();// 建议使用: valueSerializer
        byte[] channel = message.getChannel();
        System.out.print("onMessage >> " );
        System.out.println(String.format("channel: %s, body: %s, bytes: %s"
                ,new String(channel), new String(body), new String(pattern)));
    }
}

4.2.定义配置RedisListenerConfig

/**
 * @BelongsProject: easygo
 * @BelongsPackage: com.easygo.config
 * @Author: bruceliu
 * @QQ:1241488705
 * @CreateTime: 2020-04-08 11:20
 * @Description: SpringBoot整合SpringData Redis
 */
@Configuration
public class RedisConfig {

    @Bean
    RedisMessageListenerContainer container(@Qualifier("jedisConnectionFactory") JedisConnectionFactory factory) {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(factory);
        container.addMessageListener(new RedisMessageListener(), new PatternTopic("__keyevent@0__:expired"));
        return container;
    }
}

4.3.新增key并设置过期时间

/**
     * 新增Redis并设置Redis的key的过期时间
     */
    @Test
    public void testSetValueWithTimeOut() {
        //key的过期时间是10秒种自动失效
        redisTemplate.opsForValue().set("message", "各位老司机,开往红浪漫的车已经发车...", 30L, TimeUnit.SECONDS);
        System.out.println("设置完成");
    }

4.4.查询key的过期时间

 public Long testTimeTTL(){
       //根据key获取过期时间
       Long time1 = redisTemplate.getExpire("baike");
       //根据key获取过期时间并换算成指定单位
       Long time2 = redisTemplate.getExpire("baike", TimeUnit.SECONDS);
       System.out.println(time2);
       return time2;
}
Redis 键过期事件监听:从单机到集群的实现与实践 Redis键过期事件监听实现摘要(148字) Redis通过pub/sub机制实现键过期事件通知,需配置notify-keyspace-events Ex启用监听。单机环境下,Spring Boot应用可通过继承KeyExpirationEventMessageListener实现监听,但集群环境需特殊处理。由于Redis集群数据分片特性,单节点监听会遗漏其他分片的过期事件。解决方案是实现RedisClusterPubSubAdapter订阅所有节点事件,解析过期键后执行业务逻辑(如校验ES任务状态并更新M 阅读详情

相关推荐

Spring boot 实现监听 Redis key 失效事件

方式一:修改配置文件方式二:命令行开启。

Young Lee 3648

如何利用redis key过期事件实现过期提醒

redis自2.8.0之后版本提供Keyspace Notifications功能,允许客户订阅Pub / Sub频道,以便以某种方式接收影响Redis数据集的事件。 可能收到的事件的例子如下: 所有影响给定键的命令。 所有接收LPUSH操作的密钥。 所有密钥在数据库中过期0。 因为 Redis 目前的订阅与发布功能采取的是发送即忘(fire and forget)策...

任何技能都是从模仿开始,逐步升华。 3万+

Spring Boot 监听 Redis Key 失效事件实现定时任务

互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

m0_72758098的博客 1061

监控redis之key expired过期事件

软件版本 redis: 4.0.10 php:7.1 redis缓存拥有TTL特性,这个到时间删除缓存数据的特性可以运用到诸多场景,比如:客户下单后半小时不支付自动取消订单,订单完成后几天自动好评,挂机任务完成后发送通知等等。比较普通的方法是创建提个crontab定时检查,但是这个方法时效性会有误差,而且每次任务执行都要查询数据,无形中增加了许多无用数据库压力。所以,我们可以选择更好的方法,利用redis的订阅/发布的模式,事件发生时存入redis并设置时间,到点时监控expired事件即可。 .

u014043168的博客 3613

AD9026芯片开发实战:从Example Code到API调用的关键步骤解析

本文详细解析了AD9026芯片开发的核心流程,重点阐述了如何从官方提供的Example Code入手,逐步理解硬件平台发现、HAL层初始化、配置加载、芯片复位、固件启动、JESD链路建立等关键API调用序列。通过剖析示例工程的结构与核心文件,为开发者在自定义硬件平台上移植和调试AD9026驱动提供了清晰的实战指南。

java5的博客 789

Gazebo仿真平台模型搭建与修改

ROS里踩过的坑(一)Gazebo仿真平台模型搭建与修改文件讲解Models 文件World文件Launch文件模型编辑可视化编辑配置文件编辑模型展示如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出...

Redglass的博客 1万+

Redis 监听 key 失效事件

小提一下,重要:docker 镜像 redis 默认无配置文件,需要自己挂载,没用过 docker 我不会。window 版本,打开 redis 根目录下 redis.windows-service.conf。原理很简单,采用了 redis 自带的订阅/发布结构。当 key 失效之后,会向同一个库的。主题发布一个订阅信息,信息内容就是失效的 key。linux 版本同理,修改 redis.conf 配置文件。Crtl+F 搜索 notify,找到892行这个。

普罗旺斯 878

从零到一:海外短剧成品系统源码搭建流程详解及APP+H5交付服务

在当今全球化的数字娱乐浪潮中,海外短剧市场以其独特的文化魅力和广阔的受众基础,正逐渐成为内容创作者与平台运营者争相布局的新蓝海。我为了紧跟时代的发展我翻看了大量的文章,偶然间看到了一篇文章点进去发现他们是专业做短剧开发的,总结下来在这篇文章里分享给大家。

liangyill_的博客 909

Spring boot实现监听Redis key失效事件

Spring boot实现监听Redis key失效事件 1、添加相关依赖 <!-- redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependen

weixin_42245733的博客 309

【医学图像分割网络】之Res U-Net网络PyTorch复现

【医学图像分割网络】之Res U-Net网络PyTorch复现 1.内容 U-Net网络算是医学图像分割领域的开山之作,我接触深度学习到现在大概将近大半年时间,看到了很多基于U-Net网络的变体,后续也会继续和大家一起分享学习。这次分享ResNet+U-Net的一个改进版,ResNet本身就是一个十分优秀的backbone,目前应用仍然十分广泛,我们融合进ResNet后,我们就可以使得U-Net进行迁移学习了。 1.将Resnet作为encoder替换U-Net原始结构 2.U-Net提出时间较早,当时还没

qq_39071739的博客 1万+

不止于算力:深入鲲鹏920的片上网络(NoC)与一致性协议HCCS,看华为如何优化数据流转

本文深入解析了鲲鹏920处理器的片上网络(NoC)架构和一致性协议HCCS,揭示了华为如何通过创新的环总线设计和私有协议优化数据流转效率。文章详细介绍了鲲鹏920在多die、多芯片环境下的高效协同机制,包括环总线架构、HCCS协议精妙设计及物理实现创新,为云服务场景提供了高性能解决方案。

weixin_30681121的博客 253

SpringBoot实现监听redis key失效事件

需求: 处理订单过期自动取消,比如下单30分钟未支付自动更改订单状态 解决方案1: 可以利用redis天然的key自动过期机制,下单时将订单id写入redis,过期时间30分钟,30分钟后检查订单状态,如果未支付,则进行处理但是key过期了redis有通知吗?答案是肯定的。 开启redis key过期提醒 修改redis相关事件配置。找到redis配置文件redis.conf,查看“...

weixin_30634661的博客 509

Windows10 搭建 FTP 服务器

问题: 有这么一个需求,博主需要对班级同学的信息进行收集,同学的信息是一个个的文件, 正常是每个同学将自己的信息打包压缩通过 QQ 或者邮箱方式发送给博主, 博主一个个接收这些压缩包,然后进行解压,再统一放到一个文件夹下, 但是博主觉得这样子实在是太麻烦了,如果某一个同学的信息来回变动,就需要接收很多次,更改很多次, 另外如果消息过多还会产生漏掉某个同学的信息的问题。 解决方法: 如果可以使...

assiduous_me的博客 3967

如何通过springboot监听 Redis Key 失效事件实现特定任务

前言 我们以订单功能为例说明下: 生成订单后一段时间不支付订单会自动关闭。最简单的想法是设置定时任务轮询,但是每个订单的创建时间不一样,定时任务的规则无法设定,如果将定时任务执行的间隔设置的过短,太影响效率。 还有一种想法,在用户进入订单界面的时候,判断时间执行相关操作。方式可能有很多,在这里介绍一种监听 Redis 键值对过期时间来实现订单自动关闭。 实现思路 在生成订单时,向 Redis 中增加一个 KV 键值对,K 为订单号,保证通过 K 能定位到数据库中的某个订单即可,V 可为任意值。 假设,生成订

weixin_39098944的博客 402

MIPI RFFE 信号完整性与硬件设计

MIPI RFFE信号完整性设计关键点 摘要:MIPI RFFE作为射频前端控制总线,其信号完整性设计需平衡速率、驱动能力与抗干扰性。核心挑战在于确保接收端在52Mb/s速率下保持足够的电压和时序裕量。关键设计考量包括: 驱动能力优化:过强导致过冲/振铃和射频杂散,过弱则恶化时序裕量,需与总线负载匹配。 波形质量指标:严格控制上升/下降时间(兼顾EMC和时序要求),抑制过冲/振铃幅度,管理VIO电源纹波和耦合噪声。

sinat_15150363的博客 240

基于学术研究风云卫星数据下载教程

目录 一、相关网址 1.登录注册网址:国家卫星气象中心 2.风云数据服务客户端下载网址 3.风云卫星遥感数据服务网址 二、下载数据步骤 1.首先在注册登录网址,注册一个账户 2.待账户审核后,登录账户即可搜索并下载数据 三、相关工具下载 1.登录风云卫星遥感数据服务网址 2.NCSA HDFView软件 3.风云卫星数据(L1)处理软件包(FENGYUN Toolkit v1.1) 4.静止卫星云图分区图显示软件(SECView) 5.风云二号静止气象卫星数据及产品处理..

珞瑜的博客 1万+

【Redis系列】Spring boot实现监听Redis key失效事件

Spring boot实现监听Redis key失效事件.

tanpenggood 706

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Spring boot实现监听Redis key失效事件实现和其它方式

需求: 处理订单过期自动取消,比如下单30分钟未支付自动更改订单状态 用户绑定隐私号码当订单结束取消绑定等 解决方案1: 可以利用redis自带的key自动过期机制,下单时将订单id写入redis,过期时间30分钟,30分钟后检查订单状态,如果未支付,则进行处理但是key过期了redis有通知吗?答案是肯定的。 开启redis key过期提醒 修改redis相关事件配置。...

dhmkjv0619的博客 339

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

redis监听key过期_Spring Boot 监听 Redis Key 失效事件实现定时任务

业务场景实现思路开启 Redis key 过期提醒引入依赖相关配置业务场景我们以订单功能为例说明下:生成订单后一段时间不支付订单会自动关闭。最简单的想法是设置定时任务轮询,但是每个订单的创建时间不一样,定时任务的规则无法设定,如果将定时任务执行的间隔设置的过短,太影响效率。还有一种想法,在用户进入订单界面的时候,判断时间执行相关操作。方式可能有很多,在这里介绍一种监听 Redis 键值对过期时间来...

weixin_39891317的博客 94

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

上一篇: LCN分布式事务框架
下一篇: Quartz定时任务入门
熊猫IT技术
熊猫IT技术 优质创作者: Java技术领域 优质创作者: Java技术领域 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄10年 6021粉丝 1312原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

熊猫IT技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值