Redis進階
redis訂閱者模式
簡介
redis存在訂閱者模式。就像是一個廣播系統。存在三種角色:訂閱者、釋出者、頻道。
在redis當中,它們表示為subscriber(訂閱者)、publisher(釋出者)、channel(頻道)
其中的行為大抵是:訂閱者訂閱頻道--> 釋出者針對於特定頻道釋出資訊 --> 特定訂閱者收到訊息。
程式碼演示
-
訂閱頻道
# 1終端訂閱python和http的channel SUBSCRIBE python http # 2終端訂閱python的channel SUBSCRIBE python # 忘了命令可以按tab補全
訂閱之後會顯示頻道情況然後處於接收狀態:
- 終端1
- 終端2
- 終端1
-
指定頻道釋出資訊
# 指定python和http頻道分別釋出資訊。 PUBLISH python hhhhnsz PUBLISH http nbsz # 注意每次釋出完成後會顯示收到訂閱者個數
-
檢視訂閱訊息
接下來進入訂閱之後的終端1、2檢視資訊。
終端1:
終端2:
redis資料持久化
為什麼要有資料持久化
當程序消失,或者機器故障的時候,記憶體中的資料會被釋放。如果沒有持久化,資料就會消失。
分類
redis支援兩種資料持久化,分別是:AOF和RDB
RDB持久化操作
RDB持久化,即將記憶體當中的資料儲存為一個經過壓縮的RDB檔案。
可以用於使用其將redis檔案恢復。
它有兩種執行方式:手動執行生成和儲存RDB檔案。配置redis.conf定時執行。
操作和配置詳情
# redis.conf 配置詳情
# rdb配置引數(配置之後可以讀取和儲存於該位置)(配置後自動開啟)
dir /opt/redisdb/
dbfilename dump.rdb
# 自動儲存引數
save 900 1 # 900秒一個修改類操作
save 300 10 # 300秒10個操作
save 60 10000 # 60秒10000個操作
rdb持久化實踐
- 未配置
# 開啟redis之後設定兩個key值,設定完成
[root@localhost ~]# redis-cli -p 6380
127.0.0.1:6380> auth 123123456
OK
127.0.0.1:6380> keys *
(empty list or set)
127.0.0.1:6380> SET name longsihua
OK
127.0.0.1:6380> set age 20
OK
127.0.0.1:6380> keys *
1) "age"
2) "name"
# 接著將redis的程序kill
[root@localhost redis-4.0.10]# ps -ef | grep redis
root 16502 1 0 23:40 ? 00:00:00 redis-server 127.0.0.1:6380
root 16514 14411 0 23:40 pts/3 00:00:00 redis-cli -p 6380
root 16556 14341 0 23:44 pts/2 00:00:00 grep --color=auto redis
[root@localhost redis-4.0.10]# kill -9 16502
# 再次開啟redis,key全部消失
[root@localhost ~]# redis-cli -p 6380
127.0.0.1:6380> keys *
(error) NOAUTH Authentication required.
127.0.0.1:6380> auth 123123456
OK
127.0.0.1:6380> keys *
(empty list or set)
- 配置後
# 與上方相同。在設定完key之後執行save命令
[root@localhost ~]# redis-cli -p 6380
127.0.0.1:6380> AUTH 123123456
OK
127.0.0.1:6380> KEYS *
(empty list or set)
127.0.0.1:6380> set lll long
OK
127.0.0.1:6380> set age 1212
OK
127.0.0.1:6380> KEYS *
1) "age"
2) "lll"
127.0.0.1:6380> save
OK
# 殺死程序之後再透過原來的配置檔案啟動
# 可以發現key值還存在
[root@localhost ~]# redis-cli -p 6380
127.0.0.1:6380> AUTH 123123456
OK
127.0.0.1:6380> KEYS *
1) "lll"
2) "age"
aof持久化
記錄伺服器執行的所有變更操作命令。再啟動時可以重新執行回覆
AOF檔案的命令全部以redis協議的格式儲存。追加在檔案結尾
優點:最大程度保證資料不丟失
缺點: 日誌檔案大
配置引數
# 設定兩個引數即可立即啟動
# redis.conf
appendonly yes
appendfsync # always-總是修改類的操作 # everysec-每秒做一次持久化 # no-依賴於系統自帶的快取大小機制
實踐
由於內容幾乎與rdb持久化操作一致。這裡展示一下aof生成的appendonly檔案
附加: 透過config set命令可以臨時修改配置檔案,可以用於切換持久化模式。
比如說rdb切換為aof:
127.0.0.1:6379> CONFIG set appendonly yes #開啟AOF功能
OK
127.0.0.1:6379> CONFIG SET save "" #關閉RDB功能
OK
注意,這個只是臨時進行aof的切換,需要更改配置檔案使得之後啟動也生效。