最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

redis發(fā)布訂閱_動力節(jié)點(diǎn)Java學(xué)院整理

 更新時(shí)間:2017年08月25日 10:34:43   作者:huangxincheng  
這篇文章主要介紹了redis發(fā)布訂閱,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

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

一:命令簡介

從redis手冊上面可以看到,其實(shí)“發(fā)布、訂閱”模式才區(qū)區(qū)6個(gè)命令,下面聽我一一解說下哈~~~

1. subscribe

SUBSCRIBE channel [channel ...]

訂閱給定的一個(gè)或多個(gè)頻道的信息。     

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

2.publish  

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

PUBLISH channel message

將信息 message 發(fā)送到指定的頻道 channel 。

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

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

3. Psubscribe

PSUBSCRIBE pattern [pattern ...]

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

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

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

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

二: 源碼簡單分析

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

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

1.   pubsub_channels 

可以看到,它是一個(gè)字典結(jié)構(gòu),通過注釋你應(yīng)該明白,它的key為channel,value為list。

2.   pubsub_patterns

同樣從注釋中,你可以看到,其實(shí)它就是存放模式匹配的subscribe的clients列表,對吧,用一個(gè)list數(shù)組實(shí)現(xiàn)。 

3.   subcribeCommand

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

4.  publishCommand

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

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

相關(guān)文章

  • Redis主從復(fù)制操作和配置詳情

    Redis主從復(fù)制操作和配置詳情

    這篇文章主要介紹了Redis主從復(fù)制操作和配置詳情,文章通過圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • redis群集簡單部署過程

    redis群集簡單部署過程

    文章介紹了Redis,一個(gè)高性能的鍵值存儲系統(tǒng),其支持多種數(shù)據(jù)結(jié)構(gòu)和命令,它還討論了Redis的服務(wù)器端架構(gòu)、數(shù)據(jù)存儲和獲取、協(xié)議和命令、高可用性方案、緩存機(jī)制以及監(jiān)控和日志功能,文章還提供了一個(gè)部署Redis群集的簡要指南,感興趣的朋友一起看看吧
    2025-02-02
  • Redis SETNX命令在Spring Cloud中的分布式鎖用法詳解

    Redis SETNX命令在Spring Cloud中的分布式鎖用法詳解

    在Spring Cloud項(xiàng)目中,使用Java和Redis結(jié)合實(shí)現(xiàn)的分布式鎖可以確保訂單的一致性和并發(fā)控制,通過合理使用鎖的粒度以及注意事項(xiàng),可以減少死鎖問題并提高系統(tǒng)的并發(fā)性能,這篇文章主要介紹了Redis SETNX命令在Spring Cloud中的分布式鎖用法詳解,需要的朋友可以參考下
    2023-10-10
  • redis中RedissonLock如何實(shí)現(xiàn)等待鎖的

    redis中RedissonLock如何實(shí)現(xiàn)等待鎖的

    本文主要介紹了redis中RedissonLock如何實(shí)現(xiàn)等待鎖的,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Redis分布式可重入鎖實(shí)現(xiàn)方案

    Redis分布式可重入鎖實(shí)現(xiàn)方案

    在單進(jìn)程環(huán)境下,要保證一個(gè)代碼塊的同步執(zhí)行,直接用synchronized 關(guān)鍵字或ReetrantLock 即可,在分布式環(huán)境下,要保證多個(gè)節(jié)點(diǎn)的線程對代碼塊的同步訪問,就必須要用到分布式鎖方案,本文介紹一下基于 Redis實(shí)現(xiàn)的分布式鎖方案,感興趣的朋友一起看看吧
    2024-02-02
  • redis間歇性斷連解決方式

    redis間歇性斷連解決方式

    本文主要介紹了在使用lettuce4.2.2.Final版本作為Redis客戶端時(shí)遇到的間歇性斷連問題,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-03-03
  • Redis Sorted Set類型使用及應(yīng)用場景

    Redis Sorted Set類型使用及應(yīng)用場景

    Sorted Set是Redis常用的一種是數(shù)據(jù)類型,本文主要介紹了Redis Sorted Set類型使用及應(yīng)用場景,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • Redis中key過期策略的實(shí)現(xiàn)

    Redis中key過期策略的實(shí)現(xiàn)

    Key的過期機(jī)制是Redis保持高可用性的重要策略,過期策略分為惰性過期和定期過期,惰性過期在每次訪問key時(shí)檢查是否過期,定期過期則由serverCron方法定時(shí)清理過期key,本文就來詳細(xì)的介紹一下,感興趣的可以了解一下
    2024-09-09
  • 基于Redis分布式BitMap的應(yīng)用分析

    基于Redis分布式BitMap的應(yīng)用分析

    這篇文章主要介紹了基于Redis分布式BitMap的應(yīng)用,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • Redis結(jié)合 Docker 搭建集群并整合SpringBoot的詳細(xì)過程

    Redis結(jié)合 Docker 搭建集群并整合SpringBoot的詳細(xì)過程

    這篇文章主要介紹了Redis結(jié)合Docker搭建集群并整合SpringBoot的詳細(xì)過程,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-06-06

最新評論

谢通门县| 苍山县| 萨迦县| 长乐市| 乐亭县| 太保市| 前郭尔| 阿勒泰市| 遵义市| 雷山县| 白水县| 建阳市| 大兴区| 汕头市| 宁城县| 钟祥市| 巴林右旗| 莫力| 梅州市| 敖汉旗| 湾仔区| 仪征市| 治县。| 大埔区| 榆社县| 奉化市| 景泰县| 纳雍县| 都兰县| 阳泉市| 铁岭市| 洛阳市| 平度市| 沙坪坝区| 岐山县| 淮北市| 德州市| 库伦旗| 普安县| 苍南县| 金坛市|