在 redis 的2.8.0版本之後,其推出了乙個新的特性——鍵空間訊息(redis keyspace notifications),它配合 2.0.0 版本之後的 subscribe 就能完成這個定時任務的操作了,不過定時的單位是秒。
redis 在 2.0.0 之後推出了 pub / sub 的指令,大致就是說一邊給 redis 的特定頻道傳送訊息,另一邊從 redis 的特定頻道取值——形成了乙個簡易的訊息佇列
比如我們可以往 foo 頻道推乙個訊息 bar,那麼就可以直接:
//乙個客戶端訂閱foo頻道
subscribe foo
//另乙個客戶端往foo頻道傳送bar訊息
publish foo bar
在 redis 裡面有一些事件,比如鍵到期、鍵被刪除等。然後我們可以通過配置一些東西來讓 redis 一旦觸發這些事件的時候就往特定的 channel 推一條訊息。
redis 預設是關閉這個功能的,你需要修改配置檔案來開啟它,或者直接在 cli 裡面通過指令修改
k,表示 keyspace 事件,有這個字母表示會往 __keyspace@__ 頻道推訊息。
e,表示 keyevent 事件,有這個字母表示會往 __keyevent@__ 頻道推訊息。
g,表示一些通用指令事件支援,如 del、expire、rename 等等。
$,表示字串(string)相關指令的事件支援。
l,表示列表(list)相關指令事件支援。
s,表示集合(set)相關指令事件支援。
h,雜湊(hash)相關指令事件支援。
z,有序集(sorted set)相關指令事件支援。
x,過期事件,與 g 中的 expire 不同的是,g 的 expire 是指執行 expire key ttl 這條指令的時候順便觸發的事件,而這裡是指那個 key 剛好過期的這個時間點觸發的事件。
e,驅逐事件,乙個 key 由於記憶體上限而被驅逐的時候會觸發的事件。
a,g$lshzxe 的別名。也就是說 ake 的意思就代表了所有的事件。
//將notify-keyspace-events設定為kea
redis-cli config set notify-keyspace
-events kea
//訂閱所有訊息
redis-cli
--csv psubscribe '__key*__:*'
//訂閱命令分為大致兩類
//對key為foo發生的變化
//publish __keyspace@0__:foo
//del事件發生時
//publish __keyevent@0__:del
//在另乙個客戶端執行redis指令,在上面就都能收到了,而且還能收到key的過期事件expired
redis-cli
seta
1get
aexpire a
1
Mac下使用crontab來實現定時任務
說明 1 linux和mac下操作crontab都是一致的 2 配置檔案都在 etc crontab下,如果沒有就建立。3 測試發現直接使用crontab e命令建立的定時任務是放在臨時資料夾的,重啟會刪除,並且與 etc crontab檔案無關聯。實際操作 crontab的引數 eg 1 bin ...
Mac下使用crontab來實現定時任務
說明 1 linux和mac下操作crontab都是一致的 2 配置檔案都在 etc crontab下,如果沒有就建立。3 測試發現直接使用crontab e命令建立的定時任務是放在臨時資料夾的,重啟會刪除,並且與 etc crontab檔案無關聯。實際操作 檢視 crontab 是否啟動 sudo...
Mac下使用crontab來實現定時任務
說明 1 linux和mac下操作crontab都是一致的 2 配置檔案都在 etc crontab下,如果沒有就建立。3 測試發現直接使用crontab e命令建立的定時任務是放在臨時資料夾的,重啟會刪除,並且與 etc crontab檔案無關聯。實際操作 檢視 crontab 是否啟動 sudo...