1. 程式人生 > >Linux資料庫管理——day13——Redis的主從同步、資料格式

Linux資料庫管理——day13——Redis的主從同步、資料格式

主從同步

    原理:從庫向主庫傳送同步請求(sync),接收到後啟動一個程式進行後臺儲存,然後把儲存的rdb檔案發給從庫,然後從庫讀取檔案實現同步,之後主庫每進行一次寫操作就會啟動一個程式,把修改命令發給從庫,實現實時同步

    配置:
       所有庫都預設擁有主庫的配置,所以配置主從只需要從庫進行配置即可
       檢視當前狀態(role:後面寫的就是主庫或者從庫    master_link_status:代表連線狀態)

info replication

       從庫配置

slaveof 主庫IP 埠
# 如果主庫設定量登陸密碼,那就需要指定密碼
config set masterauth 密碼

       取消從庫

slaveof no one

       永久設定(修改配置檔案)

sed -i '/slaveof </cslaveof 192.168.4.51 6351' /etc/redis/6379.conf 
# 如果主庫設定了登陸密碼
sed -i '/masterauth/cmasterauth 密碼' /etc/redis/6379.conf 

    優點: 主從同步可以對資料進行備份,是負載均衡高可用的基礎服務

    缺點: 當網路繁忙或者系統繁忙的時候,資料同步有延時

    安全檢測(高可用):
       哨兵模式,用於檢測主庫健康性的系統,當發現主庫出現問題,立刻讓一個從庫成為主庫,繼續服務
       搭建過程: 裝包、配置、啟服務
          裝包: 安裝redis軟體中就有
          配置: 編寫配置檔案,可以放在任意位置,只要自己清楚即可

sentinel monitor 自定義的哨兵名  監聽的主庫IP號 主庫埠號 票數
sentinel auth-pass 哨兵名 登陸主庫的密碼(沒有密碼的話不要這一行)

          解釋:
              1. 票數 , 這指的是,多個哨兵的時候,當有幾個哨兵伺服器發現伺服器有問題,就切換主庫,如果值有一個哨兵,那就只能寫1了
              2. 哨兵切換主庫後,也會自動修改這個配置檔案,並繼續監聽
              3. 票數設定方面,滿足兩個條件最佳,票數儘量不要為一、票數不要和哨兵伺服器一樣
                  如果有多個伺服器,最好是 票數 = 哨兵伺服器數 - 1,防止某個哨兵出現為題
          啟動服務: 

redis-sentinel  編寫的配置檔案位置

資料備份—RDB/AOF

RDB
    簡介,全稱 Redis DataBase 是redis資料庫預設啟動的備份方式,其工作原理和快照,按照一定時間間隔或者指定命令,把記憶體中的資料全部存入磁碟中
    配置:在配置檔案 /etc/redis/6379.conf 中,預設開啟,其中行首為save的配置都是相關項

save "" # 禁用RBD,預設被註釋了
save 900 1 # 每隔900s的時間內,並且有1隔資料就該就進行備份
save 300 10 # 每隔300s的時間內,並且有10隔資料就該就進行備份
save 60 10000 # 每隔60s的時間內,並且有10000隔資料就該就進行備份
dbfilename "dump.rdb" # 指定儲存檔名為dump.rdb,可以修改
rdbcompression yes # 是否開啟壓縮
rdbchecksum yes # 儲存快照後進行一次資料校驗
stop-writes-on-bgsave-error yes # 當bgsave出錯的時候停止寫操作

   具體解釋: 主要解釋save,配置檔案中有多行關於save時間間隔的配置,其主要用法是,從開啟服務開始,每隔指定秒數,檢查這端時間內也沒有達到指定的修改檔案的個數,如果夠了就備份,如果沒夠就重新計時和計數,舉例就是,save 60 10000,每隔60s檢視一些這1分鐘內也沒有達到10000個修改,如果夠了那就備份然後重新計時,如果沒夠就重新然後重新計時,並且清空之前的計數

   手動存檔:
      save 指存檔時候不能寫操作
      bgsave 指存檔的時候可以同時進行寫操作

   優點: 適合大規模資料的時候備份恢復,
   缺點: 意外down機的時候丟失資料較多

AOF

   簡介,全稱 Append Only File 只做追加操作,記錄redis的全部寫操作,不斷把寫操作追加到檔案末尾

   開啟aof的操作:

# 修改配置檔案中如下內容,把no改為yes
appendonly no
appendfilename "appendonly.aof"
# 命令執行結果如下
sed -i '/appendonly /cappendonly yes' /etc/redis/6379.conf 

   設定AOF檔案記錄寫操作的頻率:

appendfsync always    # 指代每有一個寫操作就將其記錄到記憶體(極其佔用資源)
appendfsync everysec    # 指代每秒鐘記錄一次(預設的記錄頻率)
appendfsync no        # 指代當系統每隔一段時間將記憶體寫入磁碟的時候,寫入磁碟(極高丟失率)

   修復AOF: 在命令列中執行修復命令

redis-check-aof --fix AOF檔案

   優點: 在意外down機的時候丟失資料很少,最多隻有1秒的資料

   缺點: 儲存檔案往往很大,而且備份速度慢

兩種資料備份:
    1. 進行資料的備份儲存都是儲存一個檔案在/var/lib/redis/6379/下,檔名都是配置檔案中自定義的
    2. 如果需要備份到其他地方,把儲存檔案複製儲存即可,恢復的時候,把備份的檔案拷貝到指定位置,並命名為指定的檔名即可
    3. 在兩個備份都開啟的時候,啟動資料庫,預設讀取AOF備份檔案


資料型別

String字串型別

    預設所有設定的資料都是String型別
    要注意這下面命令中,所有位置都是從0開始計數,而負數代表從後往前數,-1代表最後一個
    下面所有用的例子中的 example 變數值為123456

建立或修改一個String型別的變數 set 變數 值 [ex 秒 px毫秒 nx|xx]
引數ex是定義變數的有效時間,單位是秒
引數px是定義變數的有效時間,單位是毫秒
引數nx指,該set命令只能進行建立,如果命令中變數存在,命令就會報錯
引數xx指,該set命令只能進行修改,如果命令中變數不存在,命令就會報錯
修改某字串的部分字元 setrange  變數 從第幾位開始 替換成的字元
setrange example 3 **   --> example值為 123**6
統計字元長度 strlen 變數
追加寫入 append 變數 值
append exmaple 789  -->  example值為 123456789
計數儲存資料 setbit 變數 位置 值
這是特殊的一個計數方式,位置是0-2^32內的數字,一般是從小到大依次儲存
值只能是0或者1
命令的意思就是,變數按照一個位置一個值,最後把變數中所有位置中值為1的個數計算出來,達到計數的目的
計數儲存讀取 bitcount變數
從變數中的指定位置擷取欄位 getrange 變數 開始位置 結束位置
getrange example 0 -1  -->  返回值 123456
getrange example 2 3  -->  返回值 3
getrange example 1 7  -->  返回值 23456
getrange example 7 1  -->  返回值為空 ""
同時儲存多個值 mset 變數1 值1 變數2 值2 變數3 值3
同時讀取多個值 mget 變數1 變數2 變數3
變數值自減一 decr 變數
如果變數中值有數字,那可以進行自減一的操作,有一個非數字字元都不能進行加減運算
變數值減去指定數值 decrby 變數 減少的值
變數值自加一 incr 變數
變數值加上指定數值 incrby 變數 減少的值
變數值加上一個小數 incrbyfloat 變數 小數
注意,不能減少某個小數,命令不支援


list列表儲存
    
      儲存演算法是堆疊,其存資料的讀取是先進後出

建立一個列表 lpush 列表名 值1 值2 值3
存進去後,值3是第一個值,值1是最後一個值
讀取一個列別 lrange 列表名 開始位置 終止位置
輸出並刪除表頭資料 lpop 列表
表頭資料就是讀取的第一個資料,也就是最後一個存進去的資料
統計列表中值的個數 llen 列表
輸出列表中指定位置的值 lindex 列表 位置
lindex 列表 0   輸出列表中的第一個值,和lpop不同,這隻輸出,不刪除
lindex 列表 -1   輸出列表中的最後一個值
修改指定位置的只 lset 列表 位置 值
lset 列表 0 123 把表的第一個值修改為123
把指定值插入到最後一個後面 rpush 列表 值1 值2
lpush example 1 2 3 4
lrange example 0 -1  --> 返回值為 4 3 2 1
rpush example 5 6
lrange example 0 -1  --> 返回值為 4 3 2 1 5 6
輸出並刪除最後的值 rpush 列表

hash列表
    最大的特點就是 節省空間
    儲存原理: 在一個變數有可以有多個欄位,每個欄位可以儲存一個值
                區別於list列表,hash儲存沒有順序只分,只是根據欄位進行分類儲存

建立雜湊表 hset 變數 欄位 值
如果變數存在,那這命令就是給變數新增一個欄位並賦值
獲取雜湊值 hget 變數 欄位
儲存多個欄位 hmset 變數 欄位1 值1 欄位2 值2 欄位3 值3
獲取多個欄位的雜湊值 hmget 變數 欄位1 欄位2 欄位3
獲取變數中所有欄位名 hkeys 變數
獲取變數中所有欄位名和欄位值 hgetall 變數
獲取變數中所有欄位值 hvals 變數
刪除某個欄位 hdel 變數 欄位
刪除變數 del 變數