基于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 订单超时取消内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐