redis 处理订单过期自动取消

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

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、定时任务

主要是看了下面的文章


详细文章链接在这里

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

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


你可能感兴趣的:(redis 处理订单过期自动取消)