基于Redis过期事件实现订单超时取消
程序员文章站
2022-04-05 11:34:24
订单超时取消的实现,首先想到的是定时任务,但是这种实现方式在订单量较大的情况下是有问题的,而且时间也会有误差,最大时间差就是定时任务的执行间隔时间。使用redis的过期监听事件可以比较好的解决这个问题...
订单超时取消的实现,首先想到的是定时任务,但是这种实现方式在订单量较大的情况下是有问题的,而且时间也会有误差,最大时间差就是定时任务的执行间隔时间。
使用redis的过期监听事件可以比较好的解决这个问题。实现的方式是订单创建后向redus中存一记录,一般就以订单号为key。设置过期时间(订单超时时间),一旦时间超时会触发监听事件,这时候就可以通过key判断这个订单是否支付,未支付时取消订单。
redis过期监听的实现:
1.修改redis.windows.conf配置文件中notify-keyspace-events的值
默认配置notify-keyspace-events的值为" ",修改为 notify-keyspace-events ex 这样便开启了过期事件
2. 创建配置类redislistenerconfig(配置redismessagelistenercontainer这个bean)
3.继承keyexpirationeventmessagelistener创建redis过期事件的监听类
keyexpirationeventmessagelistener类是org.springframework.data.redis.listener包下的实现类,通过继承这个类重写onmessage方法可以实现对redis所有过期事件的监听。
测试
通过redis模拟创建一个有效时间为5s的订单:
5秒后程序成功监听到了过期事件:
到此这篇关于基于redis过期事件实现订单超时取消的文章就介绍到这了,更多相关redis 订单超时取消内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!