Redis入門系列之隊列和發佈訂閱模式

一.Redis實現隊列redis

以前說了,使用lpush 配合rpop 或者rpush配合lpop就能實現隊列了.Redis提供了一個方法能夠阻塞等待,若是隊列裏面是空的就阻塞等待.shell

生產者:ui

localhost:6379> lpush queue 5 4 3 2 1
(integer) 5

消費者:spa

localhost:6379> BRPOP  queue 0
1) "queue"
2) "5"
(67.95s)
localhost:6379> BRPOP  queue 0
1) "queue"
2) "4"
localhost:6379> BRPOP  queue 0
1) "queue"
2) "3"
localhost:6379> BRPOP  queue 0
1) "queue"
2) "2"
localhost:6379> BRPOP  queue 0
1) "queue"
2) "1"
localhost:6379> BRPOP  queue 0


brpop  key timecode

time爲阻塞等待的時間,0表示無限等待隊列

隊列 queue裏面是空的,則會阻塞等待.因爲設置的時間爲無限等.it


Redis在取隊列的時候支持優先級.class

生產者:
channel

localhost:6379> lpush queue:1 5 4
(integer) 2
localhost:6379> lpush queue:2 2 1 0
(integer) 3

消費者:queue

localhost:6379> brpop queue:1 queue:2 10 
1) "queue:1"
2) "5"
localhost:6379> brpop queue:1 queue:2 10 
1) "queue:1"
2) "4"
localhost:6379> brpop queue:1 queue:2 10 
1) "queue:2"
2) "2"
localhost:6379> brpop queue:1 queue:2 10 
1) "queue:2"
2) "1"
localhost:6379> brpop queue:1 queue:2 10 
1) "queue:2"
2) "0"
localhost:6379> brpop queue:1 queue:2 10 
(nil)
(10.32s)

  brpop後面放多個隊列的時候  前面的隊列優先級高.會先取出前面的隊列以後在取後面的隊列.

二.發佈/訂閱

全部訂閱者均可以收到發佈者的內容.也是利用redis的列表實現的.可是發佈者發佈的內容不會被存儲下來,因此若是channel中沒有訂閱者,則消息直接丟失.

發佈者:

localhost:6379> publish channel hi
(integer) 0

    因爲這個時候channel尚未訂閱者,因此返回的結果是0.

訂閱者:

localhost:6379> subscribe  channel 
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channel"
3) (integer) 1

這樣每次發佈者發佈消息以後,全部對這個channel訂閱的訂閱者都能收到消息.

相關文章
相關標籤/搜索