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 變數 |