redis淘汰策略
首先我們要明確這里說的淘汰策略是淘汰散列表中的key-value,而不是value中的各個數據結構
過期key中
volatile-lru
從設置了過期時間的鍵中,移除最近最少使用的鍵(LRU算法)。適合需要優先保留高頻訪問數據的場景。
volatile-lfu
從設置了過期時間的鍵中,移除使用頻率最低的鍵(LFU算法)。適合需要根據訪問頻率淘汰的場景。
volatile-ttl
從設置了過期時間的鍵中,優先移除剩余存活時間(TTL)最短的鍵。適合需要優先淘汰即將過期數據的場景。
volatile-random
從設置了過期時間的鍵中隨機移除鍵。適合對淘汰順序無特殊要求的場景。
所有key
allkeys-lru
從所有鍵中移除最近最少使用的鍵,無論是否設置過期時間。適用于緩存系統,優先保留熱點數據。
allkeys-lfu
從所有鍵中移除使用頻率最低的鍵。適用于需要嚴格按訪問頻率管理的緩存。
allkeys-random
從所有鍵中隨機移除鍵。適用于數據重要性均勻分布的場景。
禁止淘汰
allkeys-random
從所有鍵中隨機移除鍵。適用于數據重要性均勻分布的場景。
持久化
因為redis數據庫是內存數據庫,所以在 關閉系統時如果沒有把數據存在磁盤中就會失去數據。
Redis提供兩種主要的持久化方式:RDB(Redis Database)和AOF(Append Only File)。兩種方式各有優缺點,可根據實際需求選擇或結合使用。
AOF持久化
aof 日志存儲的是 Redis 服務器的順序指令序列,aof 日志只記錄對內存修改的指令記錄;通過重放(replay)aof 日志中指令序列來恢復 Redis 當前實例的內存數據結構的狀態;
AOF分類
always:每次操作都進行同步
every_sec:每秒都進行同步
no:沒有特定同步策略,根據cache line刷到主存的策略進行持久化
AOF-rewrite
aof 持久化策略會持久化所有修改命令;里面的很多命令其實可以合并或者刪除; aof rewrite 在 aof 的基礎上,滿足一定策略則 fork 進程,根據當前內存狀態,轉換成一系列的 redis 命令,序列化成一個新的 aof 日志文件中,序列化完畢后再將操作期間發生的增量 aof 日志 追加到新的 aof 日志文件中,追加完畢后替換舊的 aof 日志文件;以此達到對 aof 日志瘦身的目 的;
優缺點
優點:數據可靠,丟失較少,持久化過程代價低
缺點:aof文件過大,數據恢復慢
RDB持久化
基于 aof 或 aof 復寫文件大的缺點,rdb 是一種快照持久化;它通過 fork 主進程,在子進程中將內 存當中的數據鍵值對按照存儲方式持久化到 rdb 文件中;rdb 存儲的是經過壓縮的二進制數據;
先fork進程防止redis進行增刪查改影響,進行寫時復制,此時fork后的子進程的虛擬地址指向的物理存儲空間和父進程一樣,這時父進程觸發寫保護中斷,如果有服務器連接redis進行操作就會使父進程指向新的物理內存地址。
優缺點
優點:rdb文件小,數據恢復快
缺點:數據丟失多,持久化過程代價高
redis主從復制
主要用來實現 redis 數據的可靠性;防止主 redis 所在磁盤損壞,造成數據永久丟失;
master是主redis,兩個從redis,從redis會連接主redis,獲取最新的數據,如果
全量數據同步
增量數據同步
redis哨兵模式
哨兵會檢測主redis和從redis是否正常,如果主redis出現差錯,哨兵會從從redis中選一個數據最新的做主redis并把信息傳遞給client
redis cluster集群
Redis cluster 將所有數據劃分為 16384(2的14次方)個槽位,每個 redis 節點負責其中一部分槽位。 cluster 集群是一種去中心化的集群方式; 如圖,該集群由三個 redis 節點組成,每個節點負責整個集群的一部分數據,每個節點負責的數據 多少可能不一樣。這三個節點相互連接組成一個對等的集群,它們之間通過一種特殊的二進制協議 交互集群信息; 當 redis cluster 的客戶端來連接集群時,會得到一份集群的槽位配置信息。這樣當客戶端要查找某 個 key 時,可以直接定位到目標節點。 客戶端為了可以直接定位(對 key 通過 crc16 進行 hash 再對 取余)某個具體的 key 所在節 點,需要緩存槽位相關信息,這樣才可以準確快速地定位到相應的節點。同時因為可能會存在客戶 端與服務器存儲槽位的信息不一致的情況,還需要糾正機制(通過返回 -MOVED 3999 127.0.0.1:6479 ,客戶端收到后需要立即糾正本地的槽位映射表)來實現槽位信息的校驗調整。 另外,redis cluster 的每個節點會將集群的配置信息持久化到配置文件中,這就要求確保配置文件 是可寫的,而且盡量不要依靠人工修改配置文件;
更多資料在:https://github.com/0voice查詢