php实现监听Redis缓存过期回调的方法
Redis简介
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
Redis缓存过期
Redis是可以设置一个Key的缓存过期时间,既设置储存记录的过期时间,时间一到将会自动销毁该条存储记录,用这个功能非常适合用来实现诸如订单支付超时、活动倒计时开奖、顺序列队执行某些操作等场景。
php安装Redis扩展
在使用php使用Redis之前,需要先安装Redis扩展,在宝塔环境下直接点击已安装的php-设置即可直接安装Redis扩展。其他环境可自行寻找安装Redis扩展的方法。
Redis配置
在使用php监听Redis过期事件之前,需要先在Redis的配置中设置一个配置项:notify-keyspace-events Ex,如果不设置这个配置项,将监听不到过期事件。打开Redis的配置文件,搜索:notify-keyspace-events Ex,并且将前面的引号去掉并保存,保存后重启Redis服务即可。
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 转载需授权!