公司商城项目中的一个订单过期自动取消问题,之前没做过类似的项目,在网上查找相关的资料
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、定时任务
推荐文章
10w定时任务,如何高效触发超时
PHP使用推荐: 戳这里