java项目中,场景:订单没有付款到期取消订单,使用的是redis过期监听来做的,做个笔记!首先使用该功能需要下载2.8.0及以上的版本,这一部分详细内容可以访问redis官网:http://redis.io/topics/notifications ,以下是我总结的:

第一步:配置redis的过期失效监听,需要修改redis.conf配置文件,找到 EVENT NOTIFICATION (事件通知)这个配置
notify-keyspace-events "" 修改为 notify-keyspace-events "Ex"

参数解释,看配置文件或者官网都有详细解释,如下:

############################# EVENT NOTIFICATION ############################### 键空间通知使得客户端可以通过订阅频道或模式,来接收那些以某种方式改动了 Redis 数据集的事件。
# 因为开启键空间通知功能需要消耗一些 CPU ,所以在默认配置下,该功能处于关闭状态。
# notify-keyspace-events 的参数可以是以下字符的任意组合,
# 它指定了服务器该发送哪些类型的通知:
# K 键空间通知,所有通知以 __keyspace@__ 为前缀
# E 键事件通知,所有通知以 __keyevent@__ 为前缀
# g DEL 、 EXPIRE 、 RENAME 等类型无关的通用命令的通知
# $ 字符串命令的通知
# l 列表命令的通知
# s 集合命令的通知
# h 哈希命令的通知
# z 有序集合命令的通知
# x 过期事件:每当有过期键被删除时发送
# e 驱逐(evict)事件:每当有键因为 maxmemory 政策而被删除时发送
# A 参数 g$lshzxe 的别名
# 输入的参数中至少要有一个 K 或者 E,否则的话,不管其余的参数是什么,都不会有任何 通知被分发。

第二步: 重新启动redis,没什么好说的,修改配置文件以及启动redis不会自行度娘

第三步:验证配置是否成功

  1. 运行redis客户端:
    redis-cli
  2. 选择你要监听的库 @后面的值,redis默认连接0号库,这里不做修改了,运行监听命令:
    psubscribe __keyevent@0__:expired
  3. 在启动一个客户端redis-cli,这里也是默认0号库,不做修改,设置一个10秒过期的key:
    SETEX mykey 10 redis
    拓展:Redis Setex 命令为指定的 key 设置值及其过期时间。如果 key 已经存在, SETEX 命令将会替换旧的值。
  4. 10秒后,可以看到监听端口可以接收到失效的redis的key。如图

springboot 项目集成ridis配置过期监听:

1.引入redis依赖,这块不做过多解释,不会的去搜集成reids

<!--Spring boot Redis--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>

2.创建两个类,第一个类配置 RedisListenerConfig 实现监听 Redis key 过期时间,我这里是监听所有db的过期事件__keyevent@*__:expired,根据自己的业务需求自行配置,@几号库,@*是所有
RedisListenerConfig:

import org.springframework.beans.factory.annotation.Autowired;
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.PatternTopic;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;/*** @ClassName RedisListenerConfig* @Description redis监听配置* @Author cl* @Date 2021-09-09 10:45*/
@Configuration
public class RedisListenerConfig {@AutowiredRedisListen redisListen;@BeanRedisMessageListenerContainer container(RedisConnectionFactory factory) {RedisMessageListenerContainer container = new RedisMessageListenerContainer();container.setConnectionFactory(factory);container.addMessageListener(redisListen, new PatternTopic("__keyevent@*__:expired"));return container;}
}

第二个类,定义监听器 RedisListen,监听 Redis key 过期事件,针对 Redis 数据失效事件,进行业务处理
RedisListen:

import com.tanghe.common.constant.RedisConstants;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.connection.MessageListener;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.stereotype.Component;/*** @ClassName RedisListen* @Description RedisListen* @Author cl* @Date 2021-09-09 10:46*/
@Slf4j
@Component
public class RedisListen implements MessageListener {@Autowiredprivate RedisTemplate<String, String> redisTemplate;@Overridepublic void onMessage(Message message, byte[] pattern) {String expiredKey = message.toString();log.info("失效的redis是:"+expiredKey);RedisSerializer<?> serializer = redisTemplate.getValueSerializer();String channel = String.valueOf(serializer.deserialize(message.getChannel()));String body = String.valueOf(serializer.deserialize(message.getBody()));log.info("channel==="+channel+"-----------------"+"body === "+body);//key过期监听,在处理业务之前校验下自己业务的key和监听的key以及库号if("__keyevent@0__:expired".equals(channel) && body.indexOf(“自己业务的key”) != -1){log.info("进来了哈");//这里写需要处理的业务}}
}

如您在阅读中发现不足,欢迎留言!!!

附redis常用指令,会持续更新!!!

windows

redis设置开机自启动:redis-server --service-install redis.windows-service.conf --loglevel verbose
redis启动命令:redis-server redis.windows.conf
redis卸载命令:redis-server --service-uninstall
redis启动服务命令:redis-server --service-start
redis停止服务命令:redis-server --service-stop
进入redis命令:redis-cli.exe -h 127.0.0.1 -p 6379
进入redis使用密码命令:redis-cli.exe -h 127.0.0.1 -p 6379 -a password

redis开启过期监听相关推荐

  1. redis依赖_请勿过度依赖 Redis 的过期监听

    阅读本文大概需要 5 分钟. 来自:http://juejin.im/post/6844904158227595271 Redis 过期监听场景 业务中有类似等待一定时间之后执行某种行为的需求 , 比 ...

  2. Redis key过期监听

    RedisKey超时监听 Key过期会不会立即删除? 不会立即删除:由于Redis属于单线程,主服务不会第一时间删除Key.所有Key不会在第一时间被删除. 删除机制: (1)定期删除:Redis每一 ...

  3. Springboot redis多数据源过期监听案例

    在上一篇Springboot redis多数据源案例中,我们实现了springboot下多数据源的案例. 本篇博客在此基础上,实现多数据源过期监听事件: 监听器配置类: package com.xin ...

  4. redis过期监听性能_基于Redis的延迟处理

    延迟处理是一个非常常用的一个功能; 例如, 下单成功后,在30分钟内没有支付,自动取消订单; 延迟队列便是延迟处理中最常见的实现方式; 先一起看下JDK中延迟队列是如何实现的. JUC的DelayQu ...

  5. springboot集成redis,及过期监听

    redis配置 package cn.jianml.redis.config;import cn.jianml.redis.listener.RedisMessageListener; import ...

  6. Redis自动过期机制之key的过期监听(7)

    Redis中的自动过期机制 前言 1.使用Redis Key自动过期机制 2.Springboot整合key过期监听 2.1. 创建表 order_number 2.2核心代码 2.2.1 核心代码 ...

  7. redistemplate hash 过期时间_Redis过期监听——订单超时-取消

    最近在做电商项目,涉及支付超时处理的几种方式.[记录哈使用redis监听处理] 提交订单的时候,支付-超过了有效时间则支付状态自动更新为已取消. 欢迎交流 redis过期监听的实现: 1.修改redi ...

  8. Windows/Linux 开启端口监听

    本文开头附:Flink 学习路线系列 ^ _ ^ 1.Windows 开启端口监听 Windows本身是不支持 nc 端口监听的.但是我们可以通过下载 netcat 来是解决这个问题.下载地址:net ...

  9. redistemplate 设置失效时间_开发新技能之利用Redis高级用法监听过期键处理失效的订单...

    前言 最近项目区分了不同的订单类型,要求订单的失效时间不一样,比如活动订单的失效时间要短一些.由于之前订单的失效时间都是固定的,现在有些类型的订单过期时间发生变化.因此需要重新处理时效订单. 订单失效 ...

最新文章

  1. 谷歌公布GSoC 2020 暑期代码项目名单,200个开源项目30个新增
  2. python学精通要多久-学习Python零基础需要学多久?
  3. windows 安装 php memcached,Windows安装配置php+memcached的方法
  4. [云炬创业基础笔记]成长资源培养与控制
  5. Hadoop中通过ToolRunner和Configured实现直接读取命令行动态出入reduce task数量,jar文件等
  6. jsp中两个字符串格式的日期可以相减吗_举个栗子!Tableau 技巧(126):学几个常用的日期函数...
  7. 重新上课,学习HTML的第一天
  8. vue 打包上线后字体图标不显示
  9. 干货 | 数据挖掘过关40题
  10. java启动参数_Java启动参数的思考
  11. Python numpy学习笔记(一)
  12. python支持xp系统吗_《xp python安装教程》 win XP的系统应该装哪个python的安装包?...
  13. 日记侠:我为什么学习网络营销
  14. maya中英文对照_Maya中英文对照
  15. 元禾谷风创投:如何避开Magic Leap这种深度科技投资的大坑
  16. java web 播放音频_用webAudio和canvas实现音频可视化
  17. 【尚硅谷Java笔记+踩坑】Git(分布式版本控制工具)
  18. 创业实践案例课程随堂检测答案
  19. 香气浓郁,冰淇淋般的质感,榴芒一刻冰皮月饼体验
  20. 2020年安康学院计算机专业代码,2020年陕西所有大学代码四位数 陕西院校代码查询2020四位数...

热门文章

  1. Day46[20180726]_Spark Streaming(一)
  2. 终于找到要辞职的原因了
  3. 江哥MySQL视频学习笔记--第10章 MySQL存储过程和函数70-MySQL-批量数据处理(掌握)
  4. 我关注的一周技术动态 2015.10.11
  5. 微型计算机中i5一般指什么,英特尔酷睿I3I5怎么区分是第几代CPU
  6. java设计模式-16模板模式
  7. Error:The above error occurred in one of your React components及A component suspended while respondi
  8. golang 代码检测工具之goimports
  9. 英汉词典mysql_php+mysql实现英汉查询词典的功能
  10. 【前端实例代码】Html5+css3创建登录和注册表单~实现新拟态新拟物风格(Neumorphism)网页图标效果~手把手教学~新手必会~超简单 ~