Java學(xué)習(xí)筆記--Redis的發(fā)布與訂閱

一、發(fā)布與訂閱

訂閱者(subscribe)-------> 發(fā)布者(publish) <----訂閱者(subscribe)

發(fā)布:

PUBLISH chan(通道)

示例:
PUBLISH foot duck

訂閱:

SUBSCRIBE chan(通道)

示例:
SUBSCRIBE foot

批量訂閱:

PSUBSCRIBE chan(通道,可以使用通配符:*)

示例:
PSUBSCRIBE foot*

雖然REDIS可以做類似MQ的事情,但是不建議使用。

二、redis的持久化處理

redis的持久化處理有以下兩種模式:

RDB

RDB:每隔一段時(shí)間,把內(nèi)存中的數(shù)據(jù)寫(xiě)入磁盤的臨時(shí)文件,作為快照,回復(fù)的時(shí)候把快照文件讀進(jìn)內(nèi)存。如果宕機(jī)重啟,那么內(nèi)存里的數(shù)據(jù)肯定會(huì)沒(méi)有的,那么再次啟動(dòng)redis后,則會(huì)恢復(fù)。默認(rèn)模式。

優(yōu)勢(shì):
  1. 使用快照模式,每隔一段時(shí)間全量備份。備份的文件為一個(gè)單文件。
  2. 容災(zāi)簡(jiǎn)單,可遠(yuǎn)程傳輸。
  3. 子進(jìn)程備份的時(shí)候,主進(jìn)程不會(huì)有任何io操作(不會(huì)有寫(xiě)入修改或刪除),保證備份數(shù)據(jù)的完整。
缺點(diǎn):
  1. 發(fā)生故障時(shí),有可能會(huì)丟失最后一次的備份數(shù)據(jù)。
  2. 子進(jìn)程所占用的內(nèi)存比會(huì)和父進(jìn)程一模一樣,如會(huì)造成CPU負(fù)擔(dān)。
  3. 由于定時(shí)全量備份是重量級(jí)操作,所以對(duì)于實(shí)時(shí)備份,就無(wú)法處理了。
在redis.conf 中的配置
<!-- 保存時(shí)間 -->

<!-- 表示15分鐘內(nèi)至少發(fā)生過(guò)1次變動(dòng),則15分鐘后會(huì)進(jìn)行一次備份 -->
save 900 1
<!-- 表示5分鐘內(nèi)至少發(fā)生過(guò)10次變動(dòng),則5分鐘后會(huì)進(jìn)行一次備份 -->
save 300 10 
<!-- 表示1分鐘內(nèi)至少發(fā)生過(guò)10000次變動(dòng),則1分鐘后會(huì)進(jìn)行一次備份 -->
save 60 10000

<!-- 備份過(guò)程中出現(xiàn)錯(cuò)誤則停止備份,默認(rèn)yes,為no時(shí)可能造成數(shù)據(jù)的不一致 -->
stop-writes-on-bgsave-error yes

<!-- 是否壓縮(LZF格式),如果想要降低CPU的損耗,可以設(shè)置為no,但是此時(shí)備份的數(shù)據(jù)會(huì)比較大 -->
rdbcompression yes

<!-- 校驗(yàn)數(shù)據(jù) -->
rdbchecksum yes

<!-- 備份的文件名 -->
dbfilename dump.rdb

<!-- 備份的文件路徑 -->
dir /usr/local/redis/working

AOF

全稱: APPEND ONLY MODEL

在redis.conf 中的配置
<!-- 默認(rèn)關(guān)閉 -->
appendonly yes

<!-- 備份文件名稱 -->
appendfilename "appendonly.aof"

<!-- 策略,有以下三種 -->
<!-- 針對(duì)每一次寫(xiě)入操作都會(huì)進(jìn)行備份 -->
# appendfsync always
<!-- 每一秒鐘進(jìn)行一次備份,默認(rèn) -->
appendfsync ererysec
<!-- 關(guān)閉 -->
#appendfsync no

<!-- 當(dāng)重寫(xiě)的時(shí)候不做同步,默認(rèn)為no -->
no-appendfsync-on-rewrite no

<!--  -->
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

可以同時(shí)使用兩種模式,默認(rèn)先加載的是AOF文件,如果AOF出現(xiàn)問(wèn)題,才會(huì)去加載RDB文件,這種做法也稱為冷熱備份。

三、主從架構(gòu)

主:master,只能有一個(gè),寫(xiě)處理。
從:slave,可以多個(gè),讀處理。在slave節(jié)點(diǎn)進(jìn)行寫(xiě)操作,會(huì)報(bào)錯(cuò)誤

主從就是讀寫(xiě)分離。水平擴(kuò)展,可以通過(guò)增加服務(wù)器以提升并發(fā)量。

數(shù)據(jù)同步的過(guò)程:
  1. slave服務(wù)器第一次啟動(dòng)時(shí),會(huì)ping一次master服務(wù)器,master服務(wù)器會(huì)把RDB文件通過(guò)硬盤復(fù)制提交給slave服務(wù)器的硬盤,以用于數(shù)據(jù)的同步。

  2. 第一次之后,每當(dāng)master服務(wù)器接收到新的寫(xiě)操作時(shí),都會(huì)提交給slave服務(wù)器,以完成數(shù)據(jù)同步。

  3. slave服務(wù)器重啟后,會(huì)加載RDB中保存的數(shù)據(jù),同時(shí)與master服務(wù)器缺失的數(shù)據(jù),master服務(wù)器會(huì)同步給slave。

注意:必須開(kāi)通master服務(wù)器的持久化機(jī)制。否則,master服務(wù)器重啟,會(huì)刪除所有slave服務(wù)器的數(shù)據(jù)。

主從配置:

<!-- 進(jìn)入到redis-cli,查詢節(jié)點(diǎn)信息 -->
info replication

<!-- 在redis.conf中搜索REPLICATION -->

<!-- masterip:主節(jié)點(diǎn)ip     masterport:主節(jié)點(diǎn)端口 -->
replicaof <masterip> <masterport>

<!-- 設(shè)置主節(jié)點(diǎn)的密碼 -->
masterauth <master-password>

<!-- 默認(rèn)配置,表示從節(jié)點(diǎn)是只讀的,不處理寫(xiě)操作 -->
replica-read-only yes

無(wú)磁盤化復(fù)制

如果磁盤是機(jī)械硬盤,那么主從磁盤復(fù)制的效率會(huì)比較低,那么此時(shí)就可以使用無(wú)磁盤華復(fù)制的方式。

目前無(wú)磁盤化復(fù)制,使用的是socket方式,但是是處于試驗(yàn)階段,不建議在生產(chǎn)環(huán)境中使用。

<!-- 在redis.conf中搜索diskless -->

<!-- 無(wú)磁盤化復(fù)制的開(kāi)關(guān),默認(rèn)關(guān)閉 -->
repl-diskless-sync no

<!-- 無(wú)磁盤化復(fù)制的等待時(shí)間,默認(rèn)5秒 -->
repl-diskless-sync-delay 5

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容