1、概念
默認情況下,事件配置是禁用的,查看配置文件,代碼如下:
# 空字符串表示禁用 notify-keyspace-events ""
事件配置是根據類型劃分的,不是某個具體的指令。
前兩項K,E表示的是事件的類型,key類型的事件有:
- x,表示key過期。
- e,表示key準備被移除。
- m,表示訪問該key時不存在
- n,表示新key的添加。
K Keyspace events, published with __keyspace@<db>__ prefix.(key類型的事件) E Keyevent events, published with __keyevent@<db>__ prefix.(command類型的事件) g Generic commands (non-type specific) like DEL, EXPIRE, RENAME, ...(與具體類型無關的命令) $ String commands(字符串數據類型的命令) l List commands(list數據類型的命令) s Set commands(set數據類型的命令) h Hash commands(hash數據類型的命令) z Sorted set commands(sorted set數據類型的命令) t Stream commands(stream數據類型的命令) d Module key type events() x Expired events (events generated every time a key expires)(key過期的事件) e Evicted events (events generated when a key is evicted for maxmemory)(key移除的事件) m Key miss events (events generated when a key that doesn't exist is accessed)(key不存在的事件) n New key events (Note: not included in the 'A' class)(新key的事件) A Alias for "g$lshztxed", so that the "AKE" string means all the events except "m".(所有命令的事件)
2、訂閱
客戶端通過pub/sub功能訂閱服務器端key相關事件,服務器端key事件觸發後會有消息,可以指定消息的pattern。
示例:
# 所有類型的事件 '__key*__:*' # keyspace類型的事件 "__keyspace*__:*" || "__keyevent*__:*" # 數據庫0 "__keyspace@0__:*" # 只監控myKey 或者只監控del事件 "__keyspace*__:myKey" || "__keyevent*__:del"
3、命令
4、過期事件
Key過期觸發的時機如下:
- 當操作key時,發現key過期。
- 後臺進程在查詢哪些key過期。
意思是expired事件觸發,並不是key的ttl變爲0,而是在過期之後,某個操作再次訪問到該key時觸發。