Redis实现订单自动过期处理(Redis设置订单过期)
Redis作为一个高效、可靠的关键值存储,用来处理高并发、高性能的数据读取和存储,在Web架构中设计应用范围很广,其中之一就是用来处理订单超时处理。
我们将需要处理的订单存储在Redis中,可以使用Hash结构存储,Hash的Key就是订单号,Hash的Value就是订单有效时间。
每次用户下单,就根据订单号将该订单写入Redis中,并设置一个指定有效时间,如2小时。
当用户下单后,订单定时任务就将有效时间过期的订单删除。具体实现方法如下:
首先我们使用Redis的 scan 命令对我们创建的订单Hash中取出Key–订单号(通过增量游标,SCAN 命令可以构建一个迭代器来遍历整个数据库):
redis-cli> scan 0
得到Long类型的游标及查询结果,如:
1) "13"
2) 1) "ORDER_100001:expire" 2) "30"
得到订单号ORDER_100001,再使用Redis的 get 命令根据订单号取出订单有效时间:
redis-cli> get ORDER_100001:expire
30
得到有效时间 30,与当前时间作对比,如果已经过期,就将该订单删除:
redis-cli> del ORDER_100001
1
此种方式的实现,我们还可以使用 Redis的 setex 命令来实现,setex 命令可以把设定有效时间的订单直接放入 Redis,当订单有效期到达时,Redis自动删除,无需设计定时任务去对比时间,效率高且方便:
redis-cli> setex ORDER_100001 1800 "Order_100001"
OK
定时任务中要检查订单有效性,检测到有效期过期,就将订单进行超时处理,把库存等进行回滚或发送相关消息给用户等。
以上,就是Redis用于实现订单超时处理的一种基本思路,可以加快处理效率,提高系统可伸缩性,值得推荐。我们可以给它以不同的角度,作出更多的发挥。