php监听redis中的key过期回调处理

php监听redis中的key过期回调处理

首先要开启redis配置

原配置

notify-keyspace-events ""

更改为

notify-keyspace-events "Ex"

这是因为redis默认不会开启keyspace notifications,因为开启后会对cpu有消耗


[root@localhost rs]# whereis redis
redis: /etc/redis.conf
[root@localhost rs]# sudo vim  /etc/redis.conf

重启redis

[root@localhost rs]# systemctl restart redis

过期事件订阅

psubscribe.php

<?php
/*************************************************************************
 * File Name: psubscribe.php
 * Author: RS
 * Created Time: 2023/4/13 11:33
 * Desc:php监听redis中的key过期回调处理
 ************************************************************************/

ini_set('default_socket_timeout', -1);  //php配置设置不超时
$redis = new Redis();
$redis->connect("127.0.0.1", 6379);
$redis->select(0);
$redis_db = 0;   //local配置中的 dbN
$redis->setOption(Redis::OPT_READ_TIMEOUT, -1);  //redis方式设置不超时,推荐
$redis->psubscribe(array('__keyevent@' . $redis_db . '__:expired'), function ($redis, $pattern, $chan, $msg){
    echo "Pattern: $pattern\n";
    echo "Channel: $chan\n";
    echo "Payload: $msg\n\n";
});

举个例子

test_setx_expire.php

<?php
/*************************************************************************
 * File Name: test_setx_expire_key.php
 * Author: shijie.zheng
 * Created Time: 2023/4/13 14:24
 * Desc:
 ************************************************************************/
$redis = new Redis();
$redis->connect("127.0.0.1", 6379);
$redis->select( 0 );
$key = "cs";
$redis->set($key, time(), array('NX', 'EX' => 3));

[root@localhost rs]# sudo php psubscribe.php
Pattern: __keyevent@0__:expired
Channel: __keyevent@0__:expired
Payload: cs

[root@localhost rs]# sudo php test_setx_expire.php


检查key是否过期

check_key_ttl.php

redis = new Redis();
$redis->connect("127.0.0.1", 6379);
$redis->select( 0 );
$key = "cs";

$ttl = $redis->ttl($key);
if ($ttl == -1) {
    echo "key 不存在或没有设置过期时间";
} else {
    echo "key $key 过期时间剩余 $ttl 秒";
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值