Redis學習筆記(2)

2022-09-11 05:24:14 字數 3221 閱讀 7553

資料單位

可以包含其他配置檔案,而redis.conf作為總的配置檔案

-網路埠的繫結

-tcp-backlog 在高併發的環境下需要高的backlog值來避免慢客戶端連線問題

-tcp-keepalive 連線存活的檢查,即心跳機制,預設300s

-loglevel 日誌水平;預設notice

與rdb持久化有關

與aof持久化有關

與備份有關

主要是金鑰相關

設定最大連線的客戶數

- 設定最大的記憶體容量;

- 快取過期策略:當記憶體滿了,需要配合maxmemory-policy策略進行處理,可以通過一些策略移除一些資料;預設設定不移除。

1

#設定最大的記憶體容量

2 # maxmemory 3

4# maxmemory policy 5

# 記憶體容量超過maxmemory後的處理策略。 6

# lru 最近最少使用演算法

7 #volatile-lru:在設定過期時間的key中使用lru演算法進行資料的移除

8 #volatile-random:在設定過期時間的key中隨機移除

9 #volatile-ttl:在設定過期時間的key中,根據ttl移除最快過期的key

10 #allkeys-lru:利用lru演算法移除任何key。

11 #allkeys-random:隨機移除任何key。

12#noeviction:不移除任何key,只是返回乙個寫錯誤;正常的生成環境中不可採用。

13#上面的這些移除策略,如果沒有合適的key可以移除,對於寫命令會返回錯誤;這種情況下,redis將不再接收寫請求,只接收get請求。

1415

# lru檢測的樣本數,

16 # maxmemory-samples 5

1718

# 是否開啟salve的最大記憶體,預設yes

19 # replica-ignore-maxmemory yes

非阻塞的方式釋放記憶體

redis集群的配置

指的是將記憶體中的資料寫入到磁碟中,以實現持久化儲存;當要恢復資料時,載入相應的檔案以恢復記憶體資料。

含義:指定時間間隔內將記憶體中的資料(即快照)寫入到磁碟中,恢復時只需要將快照直接讀到記憶體上,以實現資料的載入;是redis預設的持久化方式。

觸發方式:手動觸發和自動觸發。

- 手動觸發:通過s**e指令和bgs**e指令可以手動觸發;其中s**e是阻塞型的,bgs**e是非阻塞型的,非同步的,redis會fork乙個子程序進行持久化,客戶端仍然可以進行io操作。

- 自動觸發:通過配置檔案,自動觸發,在conf檔案的snapshotting部分設定,格式為 s**e [seconds] [changes]  引數代表在多少時間內資料進行了多少次變動,則會觸發持久                     化。預設的觸發配置:s**e 900 1 和 s**e 300 10 和 s**e 60 10000

儲存的檔案:dump.rdb   可以設定儲存目錄,缺省會儲存到工作目錄下

自動觸發的s**e:

redis會單獨建立(fork)乙個子程序來進行持久化,會先將資料寫入到乙個臨時檔案中,待持久化過程都結束了,再用這個臨時檔案替換上次持久化好的檔案。

整個過程中,主程序是不進行任何io操作的,這就確保了極高的效能。

優缺點:

適合於大規模資料的恢復,且對於資料恢復的完整性不是非常敏感;rdb方式要比aof方式更加的高效,資料恢復效能要遠高於aof;

rdb的缺點是最後一次持久化後的資料可能丟失;持久化時會fork乙個子程序,屬於重量級操作,導致記憶體消耗過大。

其他設定:

rdbcompression 壓縮,lzf

rdbchecksum 用crc64演算法進行資料校驗,預設開;會消耗10%的cpu效能。

注意:如果flushall會自動觸發生成空的dump.rdb檔案,就無法通過dump.rdb恢復原有的資料。shutdown也會觸發持久化,生成rdb檔案。

含義:以獨立日誌的方式記錄每次寫命令, 重啟時再從前到後重新執行aof檔案中的命令達到恢復資料的目的;預設不開啟。

always:每條寫指令出現後即進行記錄;效能較差。

everysec:每秒進行記錄,是非同步的持久化;預設採用。

no:不進行持久化。

aof的修復:如果aof的記錄出現錯誤,可以用指令:redis-check-aof --fix進行修復。同理對rdb。

重寫機制:

當aof檔案超過某乙個閾值,redis就啟動重寫機制對檔案進行壓縮,只保留可以恢復資料的最小指令集。通過重寫,可以時aof檔案變小,降低了檔案占用空間且更快地被redis載入。閾值可以在conf檔案中進行設定,即auto-aof-rewrite-percentage和auto-aof-rewrite-min-size。也可以手動觸發,通過bgrewriteaof指令。

重寫原理:

redis會fork乙個子程序進行重寫過程;aof重寫並不需要原有aof檔案,而是通過讀取伺服器當前的資料庫狀態來實現的,過期的資料不予考慮。通過遍歷所有資料庫的所有的鍵,採用set、rpush等指令生成最小指令集的aof檔案,並替換掉原有的aof檔案,從而實現重寫。

優缺點:

對比rdb方式,aof更加實時,對資料的完整性支援更好,在最惡劣的情況下只會丟失不超過2s的資料;在兩種方式同時存在的情況下,redis優先採用aof進行恢復。

aof檔案要遠大於rdb檔案,且aof的執行效率比rdb低,恢復速度比rdb慢。

- 因為rdb檔案只用作後備用途,建議只在sl**e上持久化rdb檔案,而且只要15分鐘備份一次就夠了,即只保留s**e 900 1這條規則。

- 如果enalbe aof,好處是在最惡劣情況下也只會丟失不超過兩秒資料,啟動指令碼較簡單只load自己的aof檔案就可以了。代價一是帶來了持續的io,二是aof rewrite的最後將rewrite過程中產生的新資料寫到新檔案造成的阻塞幾乎是不可避免的。只要硬碟許可,應該儘量減少aof rewrite的頻率,aof重寫的基礎大小預設值64m太小了,可以設到5g以上。預設超過原大小100%大小時重寫可以改到適當的數值。

- 如果不enable aof ,僅靠master-sl**e replication 實現高可用性也可以。能省掉一大筆io也減少了rewrite時帶來的系統波動。代價是如果master/sl**e同時倒掉,會丟失十幾分鐘的資料,啟動指令碼也要比較兩個master/sl**e中的rdb檔案,載入較新的那個。

Redis 學習筆記2

資料型別 string 字串型別 乙個鍵最多儲存512mb 1 set 設定key對應的value,如果key存在,同名會產生覆蓋 set key vallue 2 get 根據key找到對應的值 get key key 不存在,返回nil key 不是字串,會報錯 3 getrange 返回字串中...

redis學習筆記 (2)

4.redis中的string型別 string型別是最簡單的型別,乙個key對應乙個value,string型別是二進位制安全的。redis的string可以包含任何資料,比如jpg或者序列化的物件。儲存string型別的鍵值對。一般形式 set key value setnx key value...

redis學習筆記 2 redis的初始使用

set key value 新增鍵值對 get key 根據key獲取value del key 根據key刪除鍵值對 incr key 將value 1,如果沒有該key 預設設定該key值為0,並 1 key的型別必須為integer decr key 同上,將value 1 incrby ke...