SpringBoot-观察者模式+监听Redis中Key过期事件

SpringBoot-观察者模式+监听Redis中Key过期事件

在日常开发中,可能会遇到如下业务场景,如:时间太长未付款订单结束通知,用户离线通知,某用户掉线通知等,这些场景可以通过监听Redis中Key过期事件来实现,今天结合设计模式优雅的实现该功能,让我们别的代码更加的优雅

前言

阅读本篇文章若掌握如下知识点会让你看的更加轻松(若还没掌握的可以点击标题阅读)

类设计

首先结合观察者模式,对监听Redis中Key过期事件进行设计,请大家查看如下类图,各角色说明
KeyExpiredSubject:需要发布消息的对象都需要实现该接口,该接口主要是用于注册、删除观察者,以及发送消息给观察者
KeyExpiredObserver:需要接受消息的对象都需要实现该接口,该接口主要是接受消息
KeyExpirationEventMessageListener:这个是springboot-redis依赖提供的一个父类,集成该类重写onMessage就可以收到redis的订阅消息了,该类也有其它方法重写,本片文章主要用onMessage
KeyExpiredListener:一个发布消息的实现,该类初始化时会把所有观察者注册将来,由该类一个容器维护着,当接受到Redis发送的消息时该类就会遍历观察者容器,并且将接受到的消息发送给观察者
OrderCancel:一个观察者的实现,该类主要接收消息并且做出相应的处理

在这里插入图片描述

开启Redis事件监听

Redisnotify-keyspace-events参数可以监听很多的参数,居然参数可以看如下表格

字符发送通知
K键空间通知,所有通知以 keyspace@ 为前缀,针对Key
E键事件通知,所有通知以 keyevent@ 为前缀,针对event
gDEL 、 EXPIRE 、 RENAME 等类型无关的通用命令的通知
$字符串命令的通知
l列表命令的通知
s集合命令的通知
h哈希命令的通知
z有序集合命令的通知
x过期事件:每当有过期键被删除时发送
e驱逐(evict)事件:每当有键因为 maxmemory 政策而被删除时发送
A参数 g$lshzxe 的别名,相当于是All

这里我们只需要使用到notify-keyspace-events Ex即可,配置完成后重新启动Redis

在这里插入图片描述

KeyExpiredSubject

在这里插入图片描述

KeyExpiredObserver

在这里插入图片描述

KeyExpiredListener

在这里插入图片描述

OrderCancelObserver

在这里插入图片描述

RedisKeyExpiredConfig

将来编写好的类都注入到Spring中(如果观察者业务无需从Bean工厂获取Service进行数据库操作可以跳过这一步骤)

在这里插入图片描述

测试

启动SpringBoot项目,往Redis中Set几个即将过期的值,查看控制台

在这里插入图片描述

  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JolyouLu

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

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

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

打赏作者

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

抵扣说明:

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

余额充值