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"
所以我們日常備份中只要備份這個檔案即可