1. 程式人生 > >Redis基礎知識補充及持久化、備份介紹(二)--技術流ken

Redis基礎知識補充及持久化、備份介紹(二)--技術流ken

Redis知識補充

 在上一篇部落格《Redis基礎認識及常用命令使用(一)--技術流ken》中已經介紹了redis的一些基礎知識,以及常用命令的使用,本篇部落格將補充一些基礎知識以及redis持久化和備份。

 

一. 啟用redis的認證功能

第一步:登入redis並建立幾個字串,並退出

複製程式碼

[[email protected] ~]# redis-cli
127.0.0.1:6379> set name zhangsan
OK
127.0.0.1:6379> set addr jiangsu
OK
127.0.0.1:6379> set tel 123456
OK
127.0.0.1:6379> MGET name addr tel
1) "zhangsan"
2) "jiangsu"
3) "123456"

  127.0.0.1:6379> exit

複製程式碼

 

第二步:修改redis配置檔案

大約在80行處啟動protect-mode,並新增一行requirepass及密碼

複製程式碼

[[email protected] ~]# vim /etc/redis.conf 
...
  76 # By default protected mode is enabled. You should disable it only if
  77 # you are sure you want clients from other hosts to connect to Redis
  78 # even if no authentication is configured, nor a specific set of interfaces
  79 # are explicitly listed using the "bind" directive.
  80 protected-mode yes
  81 requirepass 123456
  82 
  83 # Accept connections on the specified port, default is 6379 (IANA #815344).
  84 # If port 0 is specified Redis will not listen on a TCP socket.
...

複製程式碼

 

第三步:重啟redis

[[email protected] ~]# systemctl restart redis

 

第四步:登入redis

可以發現登入時可以正常登入,但是已經無法檢視裡面的key了

[[email protected] ~]# redis-cli
127.0.0.1:6379> get name
(error) NOAUTH Authentication required.

 

第五步:驗證登入

使用auth加上配置檔案中定義的密碼即可進行驗證,再次獲取key就會成功了

127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> get name
"zhangsan"

 

二.Redis的訊息模式

 

訂閱的基本格式:

SUBSCRIBE channel [channel ...]    #訂閱給定的一個或多個頻道的資訊

 

傳送訊息基本格式:

PUBLISH channel message    #將資訊 message 傳送到指定的頻道 channel 

 

第一步:xshell開啟兩個視窗,並登陸redis

第二步:訂閱頻道

在一個視窗中執行如下命令,開啟訂閱

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

 

第三步:頻道釋出內容

在另外一個視窗中在此頻道釋出內容

127.0.0.1:6379> PUBLISH ken "my name is ken"
(integer) 1
127.0.0.1:6379> PUBLISH ken "welcome to my homepage"
(integer) 1

 

第四步:在另外一個視窗進行檢視

在訂閱視窗檢視。可以發現已經接收到訂閱頻道的資訊了

複製程式碼

127.0.0.1:6379> SUBSCRIBE ken
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "ken"
3) (integer) 1
1) "message"
2) "ken"
3) "my name is ken"
1) "message"
2) "ken"
3) "welcome to my homepage"

複製程式碼

 

三.Redis事務

redis和mysql一樣也支援事務

 

MULTI

標記一個事務塊的開始。

事務塊內的多條命令會按照先後順序被放進一個隊列當中,最後由 EXEC 命令原子性(atomic)地執行

 

EXEC

執行所有事務塊內的命令

 

第一步:啟動事務

127.0.0.1:6379> MULTI
OK

 

第二步:輸入命令、指令

複製程式碼

127.0.0.1:6379> INCR tel
QUEUED
127.0.0.1:6379> INCR tel
QUEUED
127.0.0.1:6379> INCR tel
QUEUED
127.0.0.1:6379> INCR tel
QUEUED

  127.0.0.1:6379> get tel
  QUEUED

複製程式碼

 

第三步:執行

127.0.0.1:6379> EXEC
1) (integer) 123457
2) (integer) 123458
3) (integer) 123459
4) (integer) 123460
5) "123460"

完整演示如下

複製程式碼

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> INCR tel
QUEUED
127.0.0.1:6379> INCR tel
QUEUED
127.0.0.1:6379> INCR tel
QUEUED
127.0.0.1:6379> INCR tel
QUEUED
127.0.0.1:6379> get tel
QUEUED
127.0.0.1:6379> EXEC
1) (integer) 123457
2) (integer) 123458
3) (integer) 123459
4) (integer) 123460
5) "123460"

複製程式碼

 

Redis持久化

 

RDB持久化

一.redis持久化會在磁碟上依賴兩個檔案

資料檔案:rdb

日誌檔案:aof

 

二.redis實現持久化兩種機制

RDB:週期的將記憶體中的資料備份到磁碟

AOF:藉助於一個日誌檔案,這個檔案會記錄每次操作

RDB:基於快照的方式實現的,資料檔案dump.rdb

 

三.實現RDB持久化的方式有兩種

1. save,bgsave

save,同步的方式,持久化操作完成前,系統會被阻塞

bgsave,非同步方式

2. 依賴提前做好的計劃任務來實現

非同步:子程序來完成持久化操作,持久化會將快照中的內容寫入到一個臨時檔案中,當持久化完成了,那麼就將這個臨時檔案改名成dump.rdb

 

四./etc/redis.conf配置檔案中關於rdb持久化引數介紹

複製程式碼

save 900 1                 #900秒和至少1個鍵改變才會被儲存
save 300 10                #300秒和至少10個鍵改變才會被儲存
save 60 10000              #60秒和至少10000個鍵改變才會被儲存
stop-writes-on-bgsave-error yes  #錯誤發生時停止寫入
rdbcompression yes               #啟用壓縮
rdbchecksum yes                  #檢驗
dbfilename dump.rdb              #rdb檔名
dir /var/lib/redis               #rdb檔案儲存路徑

複製程式碼

 

AOF持久化

AOF:比rdb方式更可靠

如果想要啟動aof持久化,只要啟動appendonly yes即可

複製程式碼

 
appendonly yes                             #是否啟用aof持久化
auto-aof-rewrite-percentage 100            #當aof檔案的大小增張了指定比例的時候,執行一次重寫操作
auto-aof-rewrite-min-size 64mb             #指定aof檔案做重寫最小值
appendfilename "appendonly.aof"            #aof持久化資訊儲存在哪個檔案中(相當於mysql的二進位制日誌檔案)
# appendfsync always                       #一旦執行了操作,會立刻將操作的語句記錄到aof檔案中
appendfsync everysec                       #每秒向aof檔案進行一次寫入操作
# appendfsync no                           #不主動向aof執行寫入操作,由系統自行判斷何時向磁碟執行寫入操作
no-appendfsync-on-rewrite no
aof-load-truncated yes  

複製程式碼

 

Redis備份

備份持久化所生成的資料(rdb檔案)

注意:生產環境中備份rdb檔案需要關閉持久化

 

第一步:檢視rdb檔案是否存在

[[email protected] ~]# ls /var/lib/redis/dump.rdb

 

第二步:檢視redis中的key

[[email protected] ~]# redis-cli
127.0.0.1:6379> keys *
1) "name"
2) "tel"
3) "addr"

 

第三步:關閉rdb持久化

配置檔案200行處,save後面為空,並註釋掉202 203 204

複製程式碼

 198 #   like in the following example:
 199 #
 200 save ""
 201 
 202 #save 900 1
 203 #save 300 10
 204 #save 60 10000
 205 

複製程式碼

 

第四步:重啟redis

[[email protected] ~]# systemctl restart redis

 

第五步:移動rdb檔案至home下

[[email protected] ~]# mv /var/lib/redis/dump.rdb /home
[[email protected] ~]# ls /var/lib/redis/

 

第六步:重啟redis

[[email protected] ~]# systemctl restart redis

 

第七步:再次登入redis檢視key

發現已經為空

[[email protected] ~]# redis-cli
127.0.0.1:6379> keys *
(empty list or set)

 

第八步:複製home下的rdb檔案至/var/lib/redis下

[[email protected] ~]# cp /home/dump.rdb /var/lib/redis/

 

第九步:重啟redis載入rdb檔案

[[email protected] ~]# systemctl restart redis

 

第十步:再次檢視keys

發現所有的keys又回來了

[[email protected] ~]# redis-cli
127.0.0.1:6379> keys *
1) "name"
2) "tel"
3) "addr"

 所以我們日常備份中只要備份這個檔案即可

鄭州不孕不育醫院

鄭州不孕不育專科醫院

鄭州不孕不育醫院

鄭州不孕不育那家好