自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

揭開Redis面紗,發(fā)布訂閱、事務、安全、持久化

數(shù)據(jù)庫 其他數(shù)據(jù)庫 Redis
Redis 發(fā)布訂閱(pub/sub)是一種消息通信模式:發(fā)送者(pub)發(fā)送消息,訂閱者(sub)接收消息。和眾多其它數(shù)據(jù)庫一樣,Redis作為NoSQL數(shù)據(jù)庫也同樣提供了事務機制。在Redis中,MULTI/EXEC/DISCARD/WATCH這四個命令是我們實現(xiàn)事務的基石。

 [[270726]] 

 

一、Redis發(fā)布訂閱

Redis 發(fā)布訂閱(pub/sub)是一種消息通信模式:發(fā)送者(pub)發(fā)送消息,訂閱者(sub)接收消息。

揭開Redis面紗,發(fā)布訂閱、事務、安全、持久化

 

打開兩個窗口:session1 和 session2

在session1中訂閱消息:

​ subscribe xbqChannel 客戶端訂閱消息,xbqChannel 為相應的頻道

在session2中發(fā)布消息:

​ publish xbqChannel testMessge 發(fā)布消息,同時訂閱該頻道的客戶端能收到該消息

二、Redis事務

和眾多其它數(shù)據(jù)庫一樣,Redis作為NoSQL數(shù)據(jù)庫也同樣提供了事務機制。在Redis中,MULTI/EXEC/DISCARD/WATCH這四個命令是我們實現(xiàn)事務的基石。

Redis 事務帶有以下重要的特征:

  • 在事務中的所有命令都將會被串行化的順序執(zhí)行,事務執(zhí)行期間,Redis不會再為其它客戶端的請求提供任何服務,從而保證了事物中的所有命令被原子的執(zhí)行。
  • 和關(guān)系型數(shù)據(jù)庫中的事務相比,在Redis事務中如果有某一條命令執(zhí)行失敗,其后的命令仍然會被繼續(xù)執(zhí)行。
  • 我們可以通過MULTI命令開啟一個事務,有關(guān)系型數(shù)據(jù)庫開發(fā)經(jīng)驗的人可以將其理解為"BEGIN TRANSACTION"語句。在該語句之后執(zhí)行的命令都將被視為事務之內(nèi)的操作,最后我們可以通過執(zhí)行EXEC/DISCARD命令來提交/回滾該事務內(nèi)的所有操作。這兩個Redis命令可被視為等同于關(guān)系型數(shù)據(jù)庫中的COMMIT/ROLLBACK語句。
  • 在事務開啟之前,如果客戶端與服務器之間出現(xiàn)通訊故障并導致網(wǎng)絡斷開,其后所有待執(zhí)行的語句都將不會被服務器執(zhí)行。然而如果網(wǎng)絡中斷事件是發(fā)生在客戶端執(zhí)行EXEC命令之后,那么該事務中的所有命令都會被服務器執(zhí)行。
  • 當使用Append-Only模式時,Redis會通過調(diào)用系統(tǒng)函數(shù)write將該事務內(nèi)的所有寫操作在本次調(diào)用中全部寫入磁盤。然而如果在寫入的過程中出現(xiàn)系統(tǒng)崩潰,如電源故障導致的宕機,那么此時也許只有部分數(shù)據(jù)被寫入到磁盤,而另外一部分數(shù)據(jù)卻已經(jīng)丟失。Redis服務器會在重新啟動時執(zhí)行一系列必要的一致性檢測,一旦發(fā)現(xiàn)類似問題,就會立即退出并給出相應的錯誤提示。此時,我們就要充分利用Redis工具包中提供的redis-check-aof工具,該工具可以幫助我們定位到數(shù)據(jù)不一致的錯誤,并將已經(jīng)寫入的部分數(shù)據(jù)進行回滾。修復之后我們就可以再次重新啟動Redis服務器了。

一個事務從開始到執(zhí)行會經(jīng)歷以下三個階段:開始事務、命令入隊、執(zhí)行事務。

三、安全

1.查看redis的密碼:config get requirepass

2.為redis設置密碼的方法:

  • 在redis.conf中進行配置:requirepass xbqpass
  • 通過命令行進行設置:redis> config set requirepass xbqpass

3.當對redis進行操作時,需要授權(quán): redis> auth xbqpass

四、持久化

1、RDB(Snapshotting快照持久化)

快照是默認的持久化方式。這種方式是就是將內(nèi)存中數(shù)據(jù)以快照的方式寫入到二進制文件中,默認的文件名為dump.rdb??梢酝ㄟ^配置設置自動做快照持久化的方式。我們可以配置redis在n秒內(nèi)如果超過m個key被修改就自動做快照,下面是默認的快照保存配置:

  1. save 900 1 #900秒內(nèi)如果超過1個key被修改,則發(fā)起快照保存
  2. save 300 10 #300秒內(nèi)容如超過10個key被修改,則發(fā)起快照保存
  3. save 60 10000 #在60秒(1分鐘)之后,如果至少有10000個key發(fā)生變化,則dump內(nèi)存快照

client 也可以使用save或者bgsave命令通知redis做一次快照持久化,每次快照持久化都是將內(nèi)存數(shù)據(jù)完整寫入到磁盤一次,并不是增量的只同步臟數(shù)據(jù)。如果數(shù)據(jù)量大的話,而且寫操作比較多,必然會引起大量的磁盤io操作,可能會嚴重影響性能。另外由于快照方式是在一定間隔時間做一次的,所以如果redis意外down掉的話,就會丟失最后一次快照后的所有修改。

2、AOF(Append-only)

redis會將每一個收到的寫命令都通過write函數(shù)追加到文件中(默認是appendonly.aof)。當redis重啟時會通過重新執(zhí)行文件中保存的寫命令來在內(nèi)存中重建整個數(shù)據(jù)庫的內(nèi)容。

  1. appendonly yes #啟用aof持久化方式
  2. # appendfsync always #每次收到寫命令就立即強制寫入磁盤,最慢的,但是保證完全的持久化,不推薦使用
  3. appendfsync everysec #每秒鐘強制寫入磁盤一次,在性能和持久化方面做了很好的折中,推薦
  4. # appendfsync no #完全依賴os,性能最好,持久化沒保證

3、RDB機制的優(yōu)勢和劣勢:

1.RDB優(yōu)勢:

  • 一旦采用該方式,那么整個Redis數(shù)據(jù)庫將只包含一個文件,這對于文件備份而言是非常完美的。比如,你可能打算每個小時歸檔一次最近24小時的數(shù)據(jù),同時還要每天歸檔一次最近30天的數(shù)據(jù)。通過這樣的備份策略,一旦系統(tǒng)出現(xiàn)災難性故障,我們可以非常容易的進行恢復。
  • 對于災難恢復而言,RDB是非常不錯的選擇。因為我們可以非常輕松的將一個單獨的文件壓縮后再轉(zhuǎn)移到其它存儲介質(zhì)上。
  • 性能最大化。對于Redis的服務進程而言,在開始持久化時,它唯一需要做的只是fork出子進程,之后再由子進程完成這些持久化的工作,這樣就可以極大的避免服務進程執(zhí)行IO操作了。
  • 相比于AOF機制,如果數(shù)據(jù)集很大,RDB的啟動效率會更高。

2.RDB劣勢:

  • 如果你想保證數(shù)據(jù)的高可用性,即最大限度的避免數(shù)據(jù)丟失,那么RDB將不是一個很好的選擇。因為系統(tǒng)一旦在定時持久化之前出現(xiàn)宕機現(xiàn)象,此前沒有來得及寫入磁盤的數(shù)據(jù)都將丟失。
  • 由于RDB是通過fork子進程來協(xié)助完成數(shù)據(jù)持久化工作的,因此,如果當數(shù)據(jù)集較大時,可能會導致整個服務器停止服務幾百毫秒,甚至是1秒鐘。

4、AOF機制的優(yōu)勢和劣勢:

1.AOF優(yōu)勢:

1). 該機制可以帶來更高的數(shù)據(jù)安全性,即數(shù)據(jù)持久性。Redis中提供了3中同步策略,即每秒同步、每修改同步和不同步。事實上,每秒同步也是異步完成的,其效率也是非常高的,所差的是一旦系統(tǒng)出現(xiàn)宕機現(xiàn)象,那么這一秒鐘之內(nèi)修改的數(shù)據(jù)將會丟失。而每修改同步,我們可以將其視為同步持久化,即每次發(fā)生的數(shù)據(jù)變化都會被立即記錄到磁盤中??梢灶A見,這種方式在效率上是最低的。

2). 由于該機制對日志文件的寫入操作采用的是append模式,因此在寫入過程中即使出現(xiàn)宕機現(xiàn)象,也不會破壞日志文件中已經(jīng)存在的內(nèi)容。然而如果我們本次操作只是寫入了一半數(shù)據(jù)就出現(xiàn)了系統(tǒng)崩潰問題,不用擔心,在Redis下一次啟動之前,我們可以通過redis-check-aof工具來幫助我們解決數(shù)據(jù)一致性的問題。

3). 如果日志過大,Redis可以自動啟用rewrite機制。即Redis以append模式不斷的將修改數(shù)據(jù)寫入到老的磁盤文件中,同時Redis還會創(chuàng)建一個新的文件用于記錄此期間有哪些修改命令被執(zhí)行。因此在進行rewrite切換時可以更好的保證數(shù)據(jù)安全性。

4). AOF包含一個格式清晰、易于理解的日志文件用于記錄所有的修改操作。事實上,我們也可以通過該文件完成數(shù)據(jù)的重建。

2.AOF劣勢:

  • 對于相同數(shù)量的數(shù)據(jù)集而言,AOF文件通常要大于RDB文件。 根據(jù)同步策略的不同,AOF在運行效率上往往會慢于RDB??傊?,每秒同步策略的效率是比較高的,同步禁用策略的效率和RDB一樣高效。

3.如何修復壞損的AOF文件:

1). 將現(xiàn)有已經(jīng)壞損的AOF文件額外拷貝出來一份。 2). 執(zhí)行"redis-check-aof --fix "命令來修復壞損的AOF文件。 3). 用修復后的AOF文件重新啟動Redis服務器。

感謝你耐心看完了文章...

 

責任編輯:龐桂玉 來源: 今日頭條
相關(guān)推薦

2022-01-16 18:51:57

.NET 6Configurati配置

2010-06-17 10:53:25

桌面虛擬化

2009-12-14 13:12:46

UbuntuAlpha

2015-08-20 13:43:17

NFV網(wǎng)絡功能虛擬化

2022-06-21 14:10:43

NIST網(wǎng)絡安全

2009-12-03 09:19:41

Linux系統(tǒng)奧秘

2019-10-12 10:50:00

JavaScript編程語言代碼

2023-06-07 13:43:49

云計算

2010-05-26 19:12:41

SVN沖突

2013-09-22 11:03:20

SocketSocket編程

2021-09-02 09:53:42

開發(fā)Redis配置

2011-12-21 09:41:44

虛擬化服務器虛擬化

2009-09-08 16:30:18

網(wǎng)銀木馬

2010-05-17 09:13:35

2014-03-12 11:11:39

Storage vMo虛擬機

2021-06-07 08:18:12

云計算云端阿里云

2013-12-05 16:19:18

TechEd2013微軟Dynamics CR

2009-09-15 15:34:33

Google Fast

2023-11-02 09:55:40

2016-04-06 09:27:10

runtime解密學習
點贊
收藏

51CTO技術(shù)棧公眾號