PHP Redis 監聽過期的 key 事件

2021-09-29 09:16:50 字數 2528 閱讀 5941

一、使用發布訂閱測試

1.在 redis.conf 設定

notify-keyspace-events ex

# x代表過期

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 **測試實現

1.建立檔案(訂閱) vim listen.php

<?php 

//這一句是說長連線不超時,如果沒有的話,這個檔案會在執行一段時間後自動停止,一定不能少

ini_set('default_socket_timeout', -1);

$redis = new redis();

$redis->connect("127.0.0.1", 6379);

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

function keycallback($redis, $pattern, $channel, $message)

2.建立檔案 vim setex.php

<?php 

$redis = new redis();

$redis->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

redis過期key監聽

修改配置檔案 redis.conf notify keyspace events ex k 鍵空間通知,以 keyspace 為字首 e 鍵事件通知,以 keysevent 為字首 g del expipre rename 等型別無關的通用命令的通知,string命令 l list命令 s set命...

redis監聽key過期

檢視redis版本 redis server v redis server version 要使redis可以監聽到key過期,需新增配置,實現原理 在redis2.8之後的版本中,當我們將對使用redis快取起來並設定快取失效時間的時候,會觸發redis的鍵事件通知,客戶端訂閱這個通知事件,服務端...

監聽Redis快取key過期

有些業務需要延遲一定時間後執行,比如訂單提交後15分鐘未支付就自動關閉,這裡只是舉個例子。我們可以通過監聽redis的key過期事件來實現這個功能。新增redis依賴 org.springframework.boot spring boot starter data redis 配置訊息監聽容器,把...