標籤:
redis是一個快速、穩定的發布/訂閱的資訊系統。
這裡有相關的介紹
可以用這個發布訂閱系統,實現聊天功能。
1,假設有兩個使用者,分別是user1和user2,各建立一個redis串連。
u1 = Redis.new
u2 = Redis.new
2,u1訂閱一個頻道channel1
u1.subscribe "channel1" do |on| on.subscribe do |channel, subscriptions| puts "Subscribed to ##{channel} (#{subscriptions} subscriptions)" end on.message do |channel, msg| puts "#{channel}: #{msg}" endend
u1進入監聽等待狀態
#Subscribed to #channel1 (1 subscriptions)
3,u2發布一條訊息
u2.publish ‘channel1‘, ‘hello‘
4,u1收到新的訊息,並列印出來
#Subscribed to #channel1 (1 subscriptions)#channel1: hello
5,block塊中,有三種回調類型,已經看到的前2種,subscribe和message,第三種是unsubscribe。
redis.subscribe(:one, :two) do |on| #channel:當前的頻道,subscriptions: 第幾個頻道 on.subscribe do |channel, subscriptions| puts "Subscribed to ##{channel} (#{subscriptions} subscriptions)" end #channel:當前的頻道,message: 訊息內容 on.message do |channel, message| puts "##{channel}: #{message}" redis.unsubscribe if message == "exit" end # on.unsubscribe do |channel, subscriptions| puts "Unsubscribed from ##{channel} (#{subscriptions} subscriptions)" end end
ps:代碼來自https://github.com/redis/redis-rb/blob/master/examples/pubsub.rb
可以在訊息定義各種規則,來實現頻道的管理。
6,下面介紹一下發布和訂閱相關的一些方法。
psubscribe。訂閱給定的模式。
redis.psubscribe(‘c*‘) do |on| on.psubscribe do |channel, subscriptions| puts "Subscribed to ##{channel} (#{subscriptions} subscriptions)" end on.pmessage do |pattern, channel, message| puts "##{channel}: #{message}" redis.unsubscribe if message == "exit" end on.punsubscribe do |channel, subscriptions| puts "Unsubscribed from ##{channel} (#{subscriptions} subscriptions)" end end
和subscribe的區別是參數是匹配的模式,block中的三個方法也對應的變化了。
小結:這個主要介紹了redis中的發布和訂閱相關的使用例子。一個使用者可以訂閱多個頻道,也可以向多個頻道發布訊息。
redis ruby用戶端學習(四)