怎么用redis实现延迟通知功能
发表于:2025-11-12 作者:千家信息网编辑
千家信息网最后更新 2025年11月12日,本篇内容介绍了"怎么用redis实现延迟通知功能"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Red
千家信息网最后更新 2025年11月12日怎么用redis实现延迟通知功能
本篇内容介绍了"怎么用redis实现延迟通知功能"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
Redis 过期监听场景
业务中有类似等待一定时间之后执行某种行为的需求 , 比如 30 分钟之后关闭订单 . 网上有很多使用 Redis 过期监听的 Demo
redis配置
把notify-keyspace-events Ex 这一行的注释打开
项目demo工程
项目结构如下图
maven依赖
kim-redis com.kim 1.0.0 4.0.0 kim-redis-expiration-notice org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-data-redis org.projectlombok lombok org.apache.commons commons-pool2
配置文件
server: port: 20103spring: redis: #数据库索引 database: 0 host: 127.0.0.1 port: 6379 password: 123456 lettuce: pool: #最大连接数 max-active: 8 #最大阻塞等待时间(负数表示没限制) max-wait: -1 #最大空闲 max-idle: 8 #最小空闲 min-idle: 0 #连接超时时间 timeout: 10000
启动类
/** * @Project: kim-redis * @PackageName: com.kim.redis.expiration.notice * @FileName: NoticeApplication.java * @Description: The NoticeApplication is... * @Author: kimwu * @Time: 2020-12-19 14:01:56 */@SpringBootApplicationpublic class NoticeApplication { public static void main(String[] args) { SpringApplication.run(NoticeApplication.class, args); }}配置类
@Configurationpublic class RedisTimeoutConfiguration { @Autowired private RedisConnectionFactory redisConnectionFactory; @Bean public RedisMessageListenerContainer redisMessageListenerContainer() { RedisMessageListenerContainer redisMessageListenerContainer = new RedisMessageListenerContainer(); redisMessageListenerContainer.setConnectionFactory(redisConnectionFactory); return redisMessageListenerContainer; } @Bean public KeyExpiredListener keyExpiredListener() { return new KeyExpiredListener(this.redisMessageListenerContainer()); }}监听类
@Slf4jpublic class KeyExpiredListener extends KeyExpirationEventMessageListener { public KeyExpiredListener(RedisMessageListenerContainer listenerContainer) { super(listenerContainer); } @Override public void onMessage(Message message, byte[] pattern) { String channel = new String(message.getChannel(), StandardCharsets.UTF_8); //过期的key String key = new String(message.getBody(), StandardCharsets.UTF_8); log.info("redis key 过期:pattern={},channel={},key={}", new String(pattern), channel, key); }}异常情况测试
当key过期时,项目宕机了
①写入redis的key
②手动关停服务,等待redis的key过期
③确认redis的key过期后,重启服务。服务不会收到通知
当key过期时,redis服务宕机了
①写入redis的key
②关停redis服务,等待redis的key过期
③启动redis服务,发现redis的过期key已经不存在了,服务没有收到通知
结论
redis的键过期本身不可靠,并不像rabbitmq一样保证了可靠性。
当服务本身宕机或者redis宕机时,将无法保证过期的key能够被消费。
当使用场景对数据完整性不那么精确时,可以使用redis的键过期策略。否则不太建议使用redis的键过期策略。
"怎么用redis实现延迟通知功能"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
服务
最大
时间
项目
监听
配置
功能
延迟
内容
场景
情况
数据
更多
知识
空闲
策略
保证
实用
最小
精确
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全员难考吗
公安局召开网络安全监督检查会议
金格iweboffice数据库
上海app软件开发投标书
网络技术方向的工资多少
软件开发名称大叠
转行软件开发哪个门槛较低
博途et200服务器模块作用
浙江大学网络安全硕士就业
安全接入区采集服务器作用
刑警学院网络安全专业课程
服务器内存条照片
软件开发一般指什么
广西深澳网络技术有限公司
网络安全的职业兴趣是什么
对象数据库与关系数据库
最新中国互联网科技
阿里巴巴自动化服务器
网络安全身份认证论文
老服务器盘
山西品质软件开发服务标准
终端软件开发师
学软件开发应该是什么性格
黑群辉服务器管理
服务器建设项目经理年薪
计算机网络技术谢树新第二版
工业网络技术传送器
销售分布式实时数据库厂家
强化学生网络安全意识的方案
服务器设置固定公网ip