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

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

车厘子9个月前 (08-01)php技术515

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监听文件即可。

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

分享到:

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

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

技术交流QQ群:657091037

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

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

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

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

php时间日期计算方法

php时间日期计算方法

  php自带的函数strtotime(),可以用来快速计算一天后、一周后、一个月后、一年后的时间。可以用于计算会员到期日,产品到期时间等等。具体用法$today = date('Y-m-d'); //今天的日期 $wutian =...

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排序查询。但是可能会有一些业务逻辑需要将查询的数据集进行二次处理以及排序等操作,今天给大家分...

PHP实现腾讯云cos对象储存盲水印添加获取文档

PHP实现腾讯云cos对象储存盲水印添加获取文档

    盲水印功能基于腾讯云数据万象,是一种全新的水印模式。通过该功能,您可将水印图以不可见的形式添加到原图信息中,并且不会对原图质量产生太大影响。当发现图片被盗取后,您可对疑似被盗取的资源进行盲水印提取,验证图片归属。 通过该 A...

php Swoole Compiler 扩展全版本大全

php Swoole Compiler 扩展全版本大全

Swoole Compiler 简介Swoole Compiler 是识沃科技推出的 PHP 代码加密和客户端授权解决方案,通过业内先进的代码加密技术,包括流程混淆、花指令、变量混淆、函数名混淆、虚拟机保护技术、扁平化代码、SCCP 优化等,将 PHP 程序源代码编译为二进制指令,来保护您的源代码。...

发表评论

访客

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