redis 高級應用之二(Redis的持久化 和 消息的[pub/sub]發佈和訂閱)

(1)redis的持久化機制

    redis是個支持持久化的內存數據庫。也就是說redis要經常把內存中的數據保存到硬盤中來保證持久化。

    redis持久化方式有兩種:

    ①.snapshotting(快照),也是默認方式

    原理:默認redis是會以快照的形式將數據持久化到磁盤的(一個二進制文件,dump.rdb,這個文件名字可以指定),在配置文件(redis.conf)中的格式是:save N M表示在N秒之內,redis至少發生M次修改則redis抓快照到磁盤。當然我們也可以手動執行save或者bgsave(異步)做快照。

    ②.aof(Append-only file) 方式

    原理:filesnapshotting方法在redis異常死掉時,最近的數據會丟失(丟失數據的多少視你save策略的配置),所以這是它最大的缺點,當業務量很大時,丟失的數據是很多的。Append-only方法可以做到全部數據不丟失,但redis的性能就要差些。AOF就可以做到全程持久化,只需要在配置文件中開啓(默認是no),appendonly yes開啓AOF之後,redis每執行一個修改數據的命令,都會把它添加到aof文件中,當redis重啓時,將會讀取AOF文件進行“重放”以恢復到redis關閉前的最後時刻。

    AOF文件刷新的方式,有三種,在redis.conf 參考配置參數appendfsync :

    appendfsync always每提交一個修改命令都調用fsync刷新到AOF文件,非常非常慢,但也非常安全;

    appendfsync everysec每秒鐘都調用fsync刷新到AOF文件,很快,但可能會丟失一秒以內的數據;

    appendfsync no依靠OS進行刷新,redis不主動刷新AOF,這樣最快,但安全性就差。默認並推薦每秒刷新,這樣在速度和安全上都做到了兼顧。

(2)消息發佈訂閱(pub/sub)

        消息發佈訂閱是一種消息通信模式,主要的目的是解耦消息發佈者和消息訂閱者之間的耦合,這點和設計模式中的觀察者模式比較相似。pub /sub不僅僅解決發佈者和訂閱者直接代碼級別耦合也解決兩者在物理部署上的耦合。

        redis作爲一個pub/sub server,在訂閱者和發佈者之間起到了消息路由的功能。訂閱者可以通過subscribepsubscribe命令向redis server訂閱自己感興趣的消息類型,redis將消息類型稱爲通道(channel)。當發佈者通過publish命令向redis server發送特定類型的消息時。訂閱該消息類型的全部client都會收到此消息。這裏消息的傳遞是多對多的。一個client可以訂閱多個 channel,也可以向多個channel發送消息。    

    請看個demo:創建三個redis client(session),

    [1].在session1 和session2中 我用來訂閱頻道,

    session1 中  訂閱了blog1

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

    session2中訂閱了blog1 和blog3 頻道:

redis 127.0.0.1:6379> subscribe blog1 blog3
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "blog1"
3) (integer) 1
1) "subscribe"
2) "blog3"
3) (integer) 2

    [2].在session3 中用來publish 頻道消息

redis 127.0.0.1:6379> publish blog1 merry-xmax
(integer) 2
redis 127.0.0.1:6379> publish blog3 hello
(integer) 1
redis 127.0.0.1:6379>

    [3].會發現session3 發佈完消息,session1和2 會自動彈出消息



發佈了25 篇原創文章 · 獲贊 20 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章