激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Redis - redis發布訂閱_動力節點Java學院整理

redis發布訂閱_動力節點Java學院整理

2019-11-07 15:21huangxincheng Redis

這篇文章主要介紹了redis發布訂閱,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

這篇文章主要介紹了redis發布訂閱,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

其實在很多的MQ產品中都存在這樣的一個模式,我們常聽到的一個例子就是郵件訂閱的場景,什么意思呢,也就是說100個人訂閱了你的博客,如果博主發表了文章,那么100個人就會同時收到通知郵件,除了這個場景還能找到其他場景么,當然有啦,你想想,如果你要在內存里面做一個讀寫分離的程序,為了維持數據的完整性,你是不是需要保證在寫入的時候,也要分發到各個讀內存的程序中呢?所以說場景還是很多的,在于你的挖掘~~~ 下面還是從基本命令入手:

一:命令簡介

redis發布訂閱_動力節點Java學院整理

從redis手冊上面可以看到,其實“發布、訂閱”模式才區區6個命令,下面聽我一一解說下哈~~~

1. subscribe


SUBSCRIBE channel [channel ...]

訂閱給定的一個或多個頻道的信息。     

從上面的官方解釋上來看,它的玩法有一點像現實生活中我們聽收音機一個道理,要想聽收音機,我們要做什么?肯定就是調頻啦,只有在正確的頻道上面,我們才能聽得到好聽的節目,所以說subscribe首先要訂閱一個頻道(channel),下面我舉個例子,開兩個client,分別訂閱著msg 這個頻道,比如下面這樣:

redis發布訂閱_動力節點Java學院整理

2.publish  

到現在為止,這兩個subscibe都在監視著msg這個頻道,接下來,如果msg頻道有消息傳出,必定會被subscribe接收到,先我們還是看看redis手冊上怎么用這個命令。


PUBLISH channel message

將信息 message 發送到指定的頻道 channel 。

看到上面命令的用法,我也就放心了。

redis發布訂閱_動力節點Java學院整理

看到么有,publish在msg這個頻道上面發送消息后,被subscribe監視到了,然后就被分別打印輸出了,好了,到現在為止,最基本的發布訂閱模式就是這樣,是不是很簡單哈。。。其實呢??? 也就是這么簡單吶,但是呢,有時候我們還有這樣一個需求,就是我能不能模糊匹配key呢???舉了例子,就是要求訂閱china為前綴的所有頻道,如果這樣也可以做到的話,那確實是很牛啦。。。強大的redis自然會做到這一點,它提供了的命令就是:Psubscribe。

3. Psubscribe


PSUBSCRIBE pattern [pattern ...]

訂閱一個或多個符合給定模式的頻道。

每個模式以 * 作為匹配符,比如 it* 匹配所有以 it 開頭的頻道( it.news 、 it.blog 、 it.tweets 等等), news.* 匹配所有以 news. 開頭的頻道( news.it 、 news.global.today 等等),諸如此類。

看到上面的解釋,你心里可能就在想,這不就是正則匹配么。。。而且前綴“P”就是Pattern的意思,對吧,接下來我就訂閱一下所有china為前綴的channel。

redis發布訂閱_動力節點Java學院整理

好了,最常用的也就是這三個命令,接下來我們簡單分析一下代碼。

二: 源碼簡單分析

其實redis的發布訂閱模式,使用RedisServer下面的 pubsub_channels字典 和 pubsub_patterns數組存放的,所有的操作代碼都

在pubsub.c文件下,如下圖:

redis發布訂閱_動力節點Java學院整理

1.   pubsub_channels 

可以看到,它是一個字典結構,通過注釋你應該明白,它的key為channel,value為list。

2.   pubsub_patterns

同樣從注釋中,你可以看到,其實它就是存放模式匹配的subscribe的clients列表,對吧,用一個list數組實現。 

3.   subcribeCommand

通過下面的代碼,你是不是在腦子里面很有輪廓了???其實這個pubsub_channels果然就是key=channel,value=list的存放模式,這個list就是所謂的clients列表,這樣的話,你就知道了哪些key掛了哪些clients,對吧,如果再publish的話,只需要遍歷一下這個list就知道結果了。

redis發布訂閱_動力節點Java學院整理

4.  publishCommand

先前也說了,publish的原理很簡單,就是找到字典中的channel這個key,獲取到clients之后,遍歷client的來發送信息。

redis發布訂閱_動力節點Java學院整理

同樣的道理,pubsub_patterns也是差不多的實現,只要大家簡單看一下pubsub.c這個源代碼文件,差不多都會懂得

延伸 · 閱讀

精彩推薦
  • RedisRedis 事務知識點相關總結

    Redis 事務知識點相關總結

    這篇文章主要介紹了Redis 事務相關總結,幫助大家更好的理解和學習使用Redis,感興趣的朋友可以了解下...

    AsiaYe8232021-07-28
  • RedisRedis全量復制與部分復制示例詳解

    Redis全量復制與部分復制示例詳解

    這篇文章主要給大家介紹了關于Redis全量復制與部分復制的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Redis爬蟲具有一定的參考學習...

    豆子先生5052019-11-27
  • Redis詳解Redis復制原理

    詳解Redis復制原理

    與大多數db一樣,Redis也提供了復制機制,以滿足故障恢復和負載均衡等需求。復制也是Redis高可用的基礎,哨兵和集群都是建立在復制基礎上實現高可用的...

    李留廣10222021-08-09
  • Redisredis實現排行榜功能

    redis實現排行榜功能

    排行榜在很多地方都能使用到,redis的zset可以很方便地用來實現排行榜功能,本文就來簡單的介紹一下如何使用,具有一定的參考價值,感興趣的小伙伴們...

    乘月歸5022021-08-05
  • Redisredis 交集、并集、差集的具體使用

    redis 交集、并集、差集的具體使用

    這篇文章主要介紹了redis 交集、并集、差集的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友...

    xiaojin21cen10152021-07-27
  • Redisredis中如何使用lua腳本讓你的靈活性提高5個逼格詳解

    redis中如何使用lua腳本讓你的靈活性提高5個逼格詳解

    這篇文章主要給大家介紹了關于redis中如何使用lua腳本讓你的靈活性提高5個逼格的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具...

    一線碼農5812019-11-18
  • RedisRedis如何實現數據庫讀寫分離詳解

    Redis如何實現數據庫讀寫分離詳解

    Redis的主從架構,能幫助我們實現讀多,寫少的情況,下面這篇文章主要給大家介紹了關于Redis如何實現數據庫讀寫分離的相關資料,文中通過示例代碼介紹...

    羅兵漂流記6092019-11-11
  • RedisRedis的配置、啟動、操作和關閉方法

    Redis的配置、啟動、操作和關閉方法

    今天小編就為大家分享一篇Redis的配置、啟動、操作和關閉方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 ...

    大道化簡5312019-11-14
主站蜘蛛池模板: 成人免费看视频 | 日韩在线播放一区二区 | 视频一区二区在线播放 | 天天草夜夜 | 欧美一区二区精品夜夜嗨 | 精品亚洲视频在线观看 | 亚洲人成在线播放 | 91 免费看片 | 日本一区二区高清不卡 | 国产成人精品午夜视频' | 激情五月少妇a | 高清av在线 | 羞羞网站在线观看入口免费 | 欧美城网站地址 | 成人免费观看49www在线观看 | 成人毛片av在线 | 国产羞羞视频在线观看免费应用 | 性少妇chinesevideo | 久久精品国产一区二区 | 91av网址| 国产高清自拍一区 | 成品片a免费直接观看 | 九九热在线视频观看 | 精品亚洲福利一区二区 | 高颜值美女啪啪 | 日本一区二区免费在线观看 | 欧美黄色一级带 | 久久老司机精品视频 | 欧美视频一区二区三区在线观看 | 91短视频网页版 | 欧美精品v国产精品v日韩精品 | 久久av一区二区 | 久久最新免费视频 | 法国性xxx精品hd | 一区二区久久精品66国产精品 | 九色在线78m | 成人啪啪18免费网站 | 欧美国产一区二区三区激情无套 | 国产无遮挡一级毛片 | 亚洲成人激情av | 久久久久久久爱 |