PHP Redis 监听过期的 key 事件

一、使用发布订阅测试

1.在 redis.conf 设置

notify-keyspace-events Ex
 
# x代表过期

PHP Redis 监听过期的 key 事件_第1张图片

2.重启redis

[root@localhost redis-5.0.5]# ls
00-RELEASENOTES  CONTRIBUTING  deps     Makefile   README.md   runtest          runtest-moduleapi  sentinel.conf  tests
BUGS             COPYING       INSTALL  MANIFESTO  redis.conf  runtest-cluster  runtest-sentinel   src            utils
[root@localhost redis-5.0.5]# pwd
/root/redis-5.0.5
[root@localhost redis-5.0.5]# ps -ef|grep 6379
root       1652      1  0 22:43 ?        00:00:02 /root/redis-5.0.5/src/redis-server 0.0.0.0:6379
root       3732   3520  0 23:22 pts/3    00:00:00 grep --color=auto 6379
[root@localhost redis-5.0.5]# /root/redis-5.0.5/src/redis-server /root/redis-5.0.5/redis.conf

二.使用redis-cli的客户端测试

1.开启 redis-cli 等待过期key的通知(订阅)

[root@localhost redis]# /root/redis-5.0.5/src/redis-cli 
127.0.0.1:6379> PSUBSCRIBE __keyevent@0__:expired
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "__keyevent@0__:expired"
3) (integer) 1

说明:

PSUBSCRIBE __keyevent@0__:expired         
 
# PSUBSCRIBE 命令订阅一个或多个符合给定模式的频道,0代表数据库0

2.开启另外一个redis-cli客户端

127.0.0.1:6379> setex test 10 123
OK

3.10秒过期后在 订阅中能看到过期的 key 信息
PHP Redis 监听过期的 key 事件_第2张图片

三.Php 代码测试实现

1.创建文件(订阅) vim listen.php

connect("127.0.0.1", 6379);

$redis->psubscribe(array('__keyevent@0__:expired'), 'keyCallback');

function keyCallback($redis, $pattern, $channel, $message) {
    echo "Pattern : $pattern\n";
    echo "Channel : $channel\n";
    echo "Message : $message\n";
        file_put_contents('test.log',$message."\r\n",FILE_APPEND);
}

2.创建文件 vim setex.php

connect("127.0.0.1", 6379);

$redis->setex("test", 10, 123);

3.使用php命令式执行

 #启动订阅
[root@localhost redis]# php listen.php 

#启动redis写入数据         
[root@localhost redis]# php setex.php 

执行结果:
PHP Redis 监听过期的 key 事件_第3张图片

你可能感兴趣的:(redis,php)