redis超時觸發事件
摘要:當裝置超過8小時未上線時傳送簡訊通知管理員,由於裝置資料通過redis維護,使用timer實現時。將timer快取到redis中再取出的時候,timer獲取不到。
參考資料:【redis高階功能-超時觸發事件】--
1、redis伺服器配置
2、監聽程式
3、訂閱程式
4、測試類
5、測試結果
1、redis伺服器配置
超時的監聽,並不需要自己發布,只需修改配置檔案redis.conf中的:
notify-keyspace-events ""
改為notify-keyspace-events ex
改完之後的配置檔案:
相關的配置說明:
# k 鍵空間通知,以__keyspace@__為字首
# e 鍵事件通知,以__keyevent@__為字首
# g del , expipre , rename 等型別無關的通用命令的通知, ...
# $ string命令
# l list命令
# s set命令
# h hash命令
# z 有序集合命令
# x 過期事件(每次key過期時生成)
# e 驅逐事件(當key在記憶體滿了被清除時生成)
# a g$lshzxe的別名,因此」ake」意味著所有的事件
修改好配置檔案後,redis會對設定了expire的資料進行監聽,當資料過期時便會將其從redis中刪除。
2、監聽程式
public class keyexpiredlistener extends jedispubsub
@override
public void onpmessage(string pattern, string channel, string message)
}
3、訂閱程式
public class subscriber
}
4、測試類
public class testjedis
}
5、測試結果執行訂閱程式subscriber
執行測試類testjedis
說明:redis資料庫分為0-15共16個庫,預設使用0資料庫,測試程式中jedis.select(n)為選擇資料庫。subscriber控制台只監聽了0庫的過期時間,因為訂閱程式設定了匹配pattern為__key*@0__:expired的。
訂閱pattern和channel可以參考:【redis訂閱與發布】
redis 超時失效key 的監聽觸發
redis自2.8.0之後版本提供keyspace notifications功能,允許客戶訂閱pub sub頻道,以便以某種方式接收影響redis資料集的事件。可能收到的事件的例子如下 所有影響給定鍵的命令。所有接收lpush操作的金鑰。所有金鑰在資料庫中過期0。因為 redis 目前的訂閱與發布...
redis 超時失效key 的監聽觸發
1.事件通過 redis 的訂閱與發布功能 pub sub 來進行分發,故需要訂 閱 keyevent 0 expired 通道 0表示db0 根據自己的dbindex選擇合適的數字 2.修改 redis.conf 檔案 修改 notify keyspace events ex k 鍵空間通知,以 ...
redis 超時失效key 的監聽觸發
1.事件通過 redis 的訂閱與發布功能 pub sub 來進行分發,故需要訂 閱 keyevent 0 expired 通道 0表示db0 根據自己的dbindex選擇合適的數字 2.修改 redis.conf 檔案 修改 notify keyspace events ex k 鍵空間通知,以 ...