标签云
网站统计
- 观海听潮•博客
- 81篇
- 151条
- 311148次
- 289次
- 美国弗吉尼亚州
您现在的位置是:首页 > 技术杂谈 > redis > php php
1、开启配置
linux修改redis.conf的notify-keyspace-events参数值为 Ex。
windows下也是修改这个参数,但是我windows下修改后没有生效,我也不清楚什么问题,后来我直接在redis下修改的:
2、输入命令:
psubscribe __keyevent@*__:expired
3、重新打开一个新窗口cmd,在 redis命令界面设置key
新界面也需要重新设置一下conf配置,因为在窗口设置的值不是持久的。
这样的话在上一个窗口就可以看到过期的key值。
4、在项目中应用:
1)新建Redis.class.php文件:
<?php
//遇到类别重复的报错,所有叫Redis2
class Redis2
{
private $redis;
public function __construct($host = '127.0.0.1', $port = 7268)
{
$this->redis = new Redis();
$this->redis->connect($host, $port);
$this->redis->auth('5863chengzhigang');
}
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);
}
}
2)新建psubscribe.php文件
<?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 "Payload: $msg\n\n";
//keyCallback为订阅事件后的回调函数,这里写业务处理逻辑,
//比如前面提到的商品不支付自动撤单,这里就可以根据订单id,来实现自动撤单
}
3)新建server.php文件
<?php
require_once './Redis.class.php';
$redis = new \Redis2();
$order_id = 123;
$redis->setex('order_id',10,$order_id);
4)在cmd窗口去运行psubscribe.php
具体方法是在psubscribe.php所在目录,执行命令:php psubscirbe.php
5)调用server.php文件,比如可以在浏览器上打开这个文件等。
6)补充说明一下,像处理过时订单业务场景,是在keyCallback回调函数进行的,$msg就是订单的key。但是因为key已经失效了,所以无法获取到它的值。也就没有办法处理订单状态等业务。我的建议是可以把key设置成key+订单id的形式。
7)以上知识很大一部分是参考别人写的,写这个得目的也主要是为了收藏和巩固一下知识。
上一篇:php获取视频的时长和第一帧
下一篇:公众号基本配置
文章评论

评论列表