700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > php监听redis key失效触发回调事件

php监听redis key失效触发回调事件

时间:2018-10-03 19:05:37

相关推荐

php监听redis key失效触发回调事件

后端开发|php教程

php,redis

后端开发-php教程

小程序接口源码,ubuntu安装遨游,tomcat 已访问就挂掉,vsc爬虫代码,php占位符是什么,十堰个人seo推广开户lzw

uikit源码,vscode 属性换行,ubuntu phpbb,tomcat连接重置,sqlite用于什么地方,wordpress 备份插件 汉化,使用量最大的前端框架,院子中有很多爬虫咋办呢,php values,专门提供seo方案,理财网站 源码,网页新年喜庆的特效,zencart 模板 下载lzw

订单超时、活动过期解决方案:php监听redis key失效触发回调事件

房产分销系统源码,vscode进行php开发,mac按照ubuntu,tomcat 响应乱码,sqlite3 显示表头,前端框架vue用来干什么的,搜索引擎爬虫是什么,redis PHP 并发,vue2.0 seo,网站上传根目录,网页生成二维码的插件下载,destoon 网站后台显示不出模板lzw

Redis 的 2.8.0 版本之后可用,键空间消息(Redis Keyspace Notifications),配合 2.0.0 版本之后的SUBSCRIBE就能完成这个定时任务的操作了,定时的单位是秒。

1.我们先订阅频道名为redisChat

2.现在,我们重新开启个 redis 客户端,然后在同一个频道 redisChat 发布消息,订阅者就能接收到消息。

接收到的消息如下:

3.Key过期事件的Redis配置

这里需要配置notify-keyspace-events的参数为 “Ex”。x 代表了过期事件。notify-keyspace-events “Ex”保存配置后,重启Redis服务,使配置生效。

PHP redis实现订阅键空间通知

redis实例化类:

redis.class.php

//遇到类别重复的报错,所有叫Redis2class Redis2 { private $redis;public function __construct($host = 127.0.0.1, $port = 6379) { $this->redis = new Redis(); $this->redis->connect($host, $port); }public function setex($key, $time, $val) { return $this->redis->setex($key, $time, $val); }public function set($key, $val) { return $this->redis->set($key, $val); }public function get($key) { return $this->redis->get($key); }public function expire($key = null, $time = 0) { return $this->redis->expire($key, $time); }public function psubscribe($patterns = array(), $callback) { $this->redis->psubscribe($patterns, $callback); }public function setOption() { $this->redis->setOption(\Redis::OPT_READ_TIMEOUT, -1); } }

过期事件的订阅:

psubscribe.php

require_once ./Redis.class.php;$redis = new \Redis2();// 解决Redis客户端订阅时候超时情况$redis->setOption();$redis->psubscribe(array(\__keyevent@0__:expired), keyCallback);// 回调函数,这里写处理逻辑function keyCallback($redis, $pattern, $chan, $msg){ echo "Pattern: $pattern\n"; echo "Channel: $chan\n"; echo "Payl oad: $msg\n\n"; //keyCallback为订阅事件后的回调函数,这里写业务处理逻辑, //比如前面提到的商品不支付自动撤单,这里就可以根据订单id,来实现自动撤单 }

设置过期事件:

index.php

require_once ./Redis.class.php;$redis = new \Redis2();$order_id = 123;$redis->setex(order_id,10,$order_id);

先用命令行模式执行psubscribe.php

在浏览器访问index.php

效果如下:

更多相关php知识,请访问php教学!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。