redis 处理订单过期自动取消

公司商城项目中的一个订单过期自动取消问题,之前没做过类似的项目,在网上查找相关的资料

1、redis 的键空间通知(keyspace notifications)

redis 在2.8版本后发布的一个功能,目前应该大部分公司用的都在这个版本以上了吧,

这个功能默认是没有开启的,开启是需要设置 config set notify-keyspace-events Ex

可设置参数

K:keyspace事件,事件以__keyspace@<db>__为前缀进行发布;

E:keyevent事件,事件以__keyevent@<db>__为前缀进行发布;

g:一般性的,非特定类型的命令,比如del,expire,rename等;

$:字符串特定命令;

l:列表特定命令;

s:集合特定命令;

h:哈希特定命令;

z:有序集合特定命令;

x:过期事件,当某个键过期并删除时会产生该事件;

e:驱逐事件,当某个键因maxmemore策略而被删除时,产生该事件;

A:g$lshzxe的别名,因此”AKE”意味着所有事件。

因为需要的是过期通知类似定时任务,所以就设置Ex就可以了,

redis-cli进入redis 执行

psubscribe __keyevent@0__:expired
复制代码

订阅0号数据的所有过期通知

SETEX order_9299292 10 99988 复制代码

设置10秒过期过期,默认使用0号库

我是用PHP实现

明白上面的原理,实现很容易,PHP的reids的扩展的方法跟redis的命令基本差不多,

psubscribe([__keyevent@1__:expired],psCallback);复制代码

主要是用这个方法,后面的psCallback 是过期后的回调方法,逻辑都里面处理。

网上都有很多相关的教程,做了一遍就在此记录一遍,有错误的,各位老哥多多指教。

2、定时任务

主要是看了下面的文章

详细

这种方式我没有去实现,感觉是第一种简单方便,而且效率挺好,

不太懂两种方式的优缺点,有懂的老哥指点一波,不胜感激

公司商城项目中的一个订单过期自动取消问题,之前没做过类似的项目,在网上查找相关的资料 1、redis 的键空间通知(keyspace notifications) redis 在2.8版本后发布的一个功能,目前应该大部分公司用的都在这个版本以上了吧, 这个功能默认是没有开启的,开启是需要设置 config set notify-keyspace-events Ex 可设置参数 K:keyspace事件,事件以__keyspace@ __为前缀进行发布; E:keyevent事件,事件以__keyevent@ __为前缀进行发布; g:一般性的,非特定类型的命令,比如del,expire,rename等; $:字符串特定命令; l:列表特定命令; s:集合特定命令; h:哈希特定命令; z:有序集合特定命令; x:过期事件,当某个键过期并删除时会产生该事件; e:驱逐事件,当某个键因maxmemore策略而被删除时,产生该事件; A:g$lshzxe的别名,因此”AKE”意味着所有事件。 因为需要的是过期通知类似定时任务,所以就设置Ex就可以了, redis-cli进入redis 执行 psubscribe __keyevent@0__:expired 复制代码 订阅0号数据的所有过期通知 SETEX order_9299292 10 99988 复制代码 设置10秒过期过期,默认使用0号库 我是用PHP实现 明白上面的原理,实现很容易,PHP的reids的扩展的方法跟redis的命令基本差不多, psubscribe([__keyevent@1__:expired],psCallback);复制代码 主要是用这个方法,后面的psCallback 是过期后的回调方法,逻辑都里面处理。 网上都有很多相关的教程,做了一遍就在此记录一遍,有错误的,各位老哥多多指教。 2、定时任务 主要是看了下面的文章 详细 这种方式我没有去实现,感觉是第一种简单方便,而且效率挺好, 不太懂两种方式的优缺点,有懂的老哥指点一波,不胜感激
经验分享 程序员 微信小程序 职场和发展