1 使用lpush+rpop即可實現佇列的概念。並通過迴圈,來讀取list中資料。
不足:需要使用迴圈,每隔1s讀取佇列。
2 brpop,有訊息加入佇列就發通知。brpop會阻塞佇列,rpop不會。
brpop返回值介紹:
假如在指定時間內沒有任何元素被彈出,則返回乙個
nil 和等待時長。
反之,返回乙個含有兩個元素的列表,第乙個元素是被彈出元素所屬的
key ,第二個元素是被彈出元素的值。
redis> llen course3 優先順序佇列(integer) 0
redis> rpush course algorithm001
(integer) 1
redis> rpush course c++101
(integer) 2
redis> brpop course 30
1) "course" # 彈出元素的 key
2) "c++101" # 彈出元素的值
brpop 可以同時監聽多個佇列。
會從左到右依次讀取。
4 發布訂閱模式
publish+subscribe。
作為訊息佇列來說,企業中選擇mq的還是多數,因為像rabbit,rocket等mq中介軟體都屬於很成熟的產品,效能一般但可靠性較強,而kafka原本設計的初衷是日誌統計分析,現在基於大資料的背景下也可以做運營資料的分析統計,而redis的主要場景是記憶體資料庫,作為訊息佇列來說可靠性太差,而且速度太依賴網路io,在伺服器本機上的速度較快,且容易出現資料堆積的問題,在比較輕量的場合下能夠適用。希望有更專業的人來總結總結。
# 對沒有訂閱者的頻道傳送資訊redis> publish bad_channel "can any body hear me?"
(integer) 0
# 向有乙個訂閱者的頻道傳送資訊
redis> publish msg "good morning"
(integer) 1
# 向有多個訂閱者的頻道傳送資訊
redis> publish chat_room "hello~ everyone"
(integer) 3# 訂閱 msg 和 chat_room 兩個頻道
# 1 - 6 行是執行 subscribe 之後的反饋資訊
# 第 7 - 9 行才是接收到的第一條資訊
# 第 10 - 12 行是第二條
redis> subscribe msg chat_room
reading messages... (press ctrl-c to quit)
1) "subscribe" # 返回值的型別:顯示訂閱成功
2) "msg" # 訂閱的頻道名字
3) (integer) 1 # 目前已訂閱的頻道數量
1) "subscribe"
2) "chat_room"
3) (integer) 2
1) "message" # 返回值的型別:資訊
2) "msg" # **(從那個頻道傳送過來)
3) "hello moto" # 資訊內容
1) "message"
2) "chat_room"
3) "testing...haha"
Redis學習 4 發布訂閱
redis 發布訂閱 pub sub 是一種訊息通訊模式 傳送者 pub 傳送訊息,訂閱者 sub 接收訊息。redis 客戶端可以訂閱任意數量的頻道。當有新訊息通過 publish 命令傳送給頻道 channel1 時,這個訊息就會被傳送給訂閱它的三個客戶端 訂閱乙個或多個符合給定模式的頻道。pu...
Redis訊息通知
redis的訊息通知通過列表型別實現,分為兩種模式 阻塞式 發布 訂閱式 阻塞式 顧名思義,訊息生產者負責生產訊息,並將訊息放到佇列的一端,訊息的消費者負責消費訊息,從佇列的另一端取出訊息,然後對其進行消費,假如訊息的生產者突然罷工了,或者訊息的生產速度趕不上消費者的消費速度,那麼訊息的消費者會一直...
Redis自學筆記 4 4高階 訊息通知
傳遞任務的佇列.與任務佇列進行互動的實體有兩類,一類是生產者,一類是消費者.生產者將需要處理的任務放入任務佇列中,二消費者不斷從任務佇列中讀入任務 資訊並執行.優點 松耦合 生產者和消費者無需知道彼此實現的細節 易於擴充套件 消費者可以有多個,而且可以分布在不同伺服器 3.4.2節中的lpush和r...