redis訂閱者和進階

longsihua2003發表於2024-09-09

Redis進階

redis訂閱者模式

簡介

redis存在訂閱者模式。就像是一個廣播系統。存在三種角色:訂閱者、釋出者、頻道。

在redis當中,它們表示為subscriber(訂閱者)、publisher(釋出者)、channel(頻道)

其中的行為大抵是:訂閱者訂閱頻道--> 釋出者針對於特定頻道釋出資訊 --> 特定訂閱者收到訊息。

img

程式碼演示

  1. 訂閱頻道

    # 1終端訂閱python和http的channel
    SUBSCRIBE python http
    # 2終端訂閱python的channel
    SUBSCRIBE python
    # 忘了命令可以按tab補全
    
    

    訂閱之後會顯示頻道情況然後處於接收狀態:

    • 終端1
      img
    • 終端2
      img
  2. 指定頻道釋出資訊

    # 指定python和http頻道分別釋出資訊。
    PUBLISH python hhhhnsz
    PUBLISH http nbsz
    # 注意每次釋出完成後會顯示收到訂閱者個數
    

    img

  3. 檢視訂閱訊息
    接下來進入訂閱之後的終端1、2檢視資訊。
    終端1:
    img
    終端2:
    img

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持久化實踐

  1. 未配置
    # 開啟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)

  1. 配置後
    # 與上方相同。在設定完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檔案
img

附加: 透過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的切換,需要更改配置檔案使得之後啟動也生效。

相關文章