当前位置:首页 > 编程技术 > php技术 > 正文内容

php实现监听Redis缓存过期回调的方法

车厘子11个月前 (08-01)php技术857

Redis简介   

Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

Redis缓存过期

Redis是可以设置一个Key的缓存过期时间,既设置储存记录的过期时间,时间一到将会自动销毁该条存储记录,用这个功能非常适合用来实现诸如订单支付超时、活动倒计时开奖、顺序列队执行某些操作等场景。

php安装Redis扩展

在使用php使用Redis之前,需要先安装Redis扩展,在宝塔环境下直接点击已安装的php-设置即可直接安装Redis扩展。其他环境可自行寻找安装Redis扩展的方法。

image.png

Redis配置

在使用php监听Redis过期事件之前,需要先在Redis的配置中设置一个配置项:notify-keyspace-events Ex,如果不设置这个配置项,将监听不到过期事件。打开Redis的配置文件,搜索:notify-keyspace-events Ex,并且将前面的引号去掉并保存,保存后重启Redis服务即可。

image.png

php代码实现

<?php


//首先实例化Redis
$redis = new \Redis();

//使用默认端口号连接Redis
$res = $redis->connect('127.0.0.1');
if(!$res){
    echo 'Redis数据库连接失败!';
}

//设置一个普通键值参数到redis数据库,并设置超时是为10秒
$redis->setex('test',10,'true');

//设置监听超时时间,-1表示一直监听
$redis->setOption(\Redis::OPT_READ_TIMEOUT,-1);

/**
 * 设置监听函数,第二个参数就是自定义的函数 ($redis, $pattern, $channel, $msg)
 * 其中有用的是$msg这个参数
 * keyevent@?__:expired  其中的?号代码监听所有数据库,keyevent@0__:expired 表示监听第一个数据库
 */
$redis->psubscribe(['__keyevent@?__:expired'],function($redis, $pattern, $channel, $msg){
    echo "$pattern\n";
    echo "$channel\n";
    echo "参数名:" . "$msg\n";
});

运行10秒钟后输出以下结果:

__keyevent@?__:expired
__keyevent@0__:expired
参数名:test

从上面的运行结果可以看出,$msg这个参数就是我们设置的Key,这个时候就可以根据key来实现你的业务逻辑。

实际应用

在实际应用过程中,需要将设置监听函数单独写在一个php文件内,然后需要运行这个php文件长期驻守在进程中进行监听。如果是宝塔环境可以使用宝塔自带的进程守护,来长期运行这个php监听文件即可。

本文链接:http://yun.ha.cn/post/146.html 转载需授权!

分享到:

扫描二维码推送至手机访问。

版权声明:本文由云蛤社区发布,如需转载请注明出处。

技术交流QQ群:657091037

部分文章和资源从互联网中收集,如有侵权 联系站长删除。

本文链接:http://yun.ha.cn/post/146.html

标签: 云蛤原创
分享给朋友:

“php实现监听Redis缓存过期回调的方法” 的相关文章

thinkphp使用join 关联查询和模型关联查询的区别

thinkphp使用join 关联查询和模型关联查询的区别

对于关联查询,我用的更多的都是 一对一  一对多  多对多的 关联查询 。而他们都有一个很大的问题,当出现多表联查的时候写起来不太灵活,这确实是一个大问题,虽然说代码写起来很规范,但有个问题就是代码量太多了 。  而 tinkphp 的join 查询是原生查询 ...

PHP 使用curl发送GET、POST请求

PHP 使用curl发送GET、POST请求

GET请求<?php   //初始化 $curl = curl_init();   //设置url curl_setopt($curl, CURLOPT_URL, 'http://httpbin.org/get&#...

记录必应推送写法 bing 推送功能

记录必应推送写法 bing 推送功能

function bing_tuisong($url,$urlarray) {     $data = [ // 数据        ...

php自动计算并转换流量单位(b kb mb gb tb转换)的方法

php自动计算并转换流量单位(b kb mb gb tb转换)的方法

   我们都知道系统的流量统计都是以字节单位进行存储,如果我们在做流量统计相关功能时,不可能直接将字节显示给用户,如果直接显示比特将会是很长一段数字,例如:1KB = 1024b1MB = 1048576b1GB = 1073741824b  由此可...

php通过时间戳自动计算 1分钟前,N小时前,N年前的例子

php通过时间戳自动计算 1分钟前,N小时前,N年前的例子

  最近刚好有一个php项目需求,需要用显示帖子的发布时间,时间显示格式要求是这种的:N分钟前,N小时前,N个月前,N年前;其实实现方法有很多种,我这里就用了最简单傻瓜式的方式来写。直接判断秒数来输出对应的时间,具体如下:1分钟 = 60秒1小时 = 3600秒一天(24小时) =&nbs...

对ThinkPHP模型查询出的结果数据集进行排序的方法

对ThinkPHP模型查询出的结果数据集进行排序的方法

   相信很多小伙伴也在用ThinkPHP进行项目开发,ThinkPHP的模型功能可以很方便的对数据库进行增删改查的操作,ThinkPHP的模型也自带了order()方法进行原生MySql排序查询。但是可能会有一些业务逻辑需要将查询的数据集进行二次处理以及排序等操作,今天给大家分...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。