使用 Redis 來實現定時任務

2021-08-01 04:01:32 字數 1578 閱讀 9829

在 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...