目錄
RDB vs AOF
RDB:手動/定時 BGSAVE 生成快照 dump.rdb(占用小、恢復快;可能丟最近幾秒)
AOF:把寫命令順序追加到 appendonly.aof,更安全。appendfsync 三種策略:
always:每次寫都 fsync(最安全、最慢)
everysec:每秒 fsync(推薦,最多丟 1 秒)
no:由 OS 自己刷盤(性能好、風險高)
恢復順序(重啟加載):若 AOF 開啟,則優先用 AOF;否則用 RDB
恢復順序 = Redis 重啟時,先用 AOF 還是 RDB 來恢復數據的優先級
規則 = 如果開啟了 AOF,就優先用 AOF 文件;否則用 RDB 文件
重啟加載 = 指 Redis 啟動時,從磁盤文件把數據重新加載回內存
為什么叫 BGSAVE?
BG = Background(后臺)
SAVE = 保存
BGSAVE = 在后臺保存快照
區別于 SAVE 命令,它是“前臺保存”,會阻塞整個 Redis,幾乎沒人用
為什么叫 dump.rdb?
dump = 數據轉儲 / 快照(database dump)
rdb = Redis DataBase(RDB 格式)
dump.rdb = Redis 材料快照文件
RDB 是 Redis 的一種持久化格式,保存內容的“快照檔案”
R = Redis
DB = Database
RDB = Redis Database file
AOF 是 Redis 的另一種持久化方式,把所有寫操作順序追加(append)到日志文件里。
A = Append
O = Only
F = File
AOF = Append Only File(只追加文件,不會改寫之前的內容)
AOF 的刷盤策略配置項,決定寫入操作多久真正同步到磁盤就是appendfsync
append 表明 AOF 日志是追加寫入的
fsync 表示強制把緩沖區數據刷到磁盤
合起來就是 AOF 文件追加寫入時如何執行 fsync
fsync 是 Unix/Linux 架構里的一個 體系調用
強制把文檔緩沖區的內容寫入磁盤,確保數據真正落盤就是作用
f = file(文件)
sync = synchronize(同步)
合起來就是 file synchronize ,表示文件同步
表達的就是把文件緩沖和磁盤內容同步
內存模型
Redis 是內存數據庫,容量靠 maxmemory 控制
淘汰策略(maxmemory-policy):
allkeys-lru(最常見):淘汰最近最少使用的鍵
volatile-lru:只淘汰帶過期時間的鍵
noeviction:直接報錯
Spring Boot 項目里:
緩存層一般會安裝 LRU,防止內存爆掉
寫業務代碼時最好給緩存數據設置 TTL,避免長期占用
內存數據庫是啥?
定義:數據主要存放在內存 (RAM) 中,而不是磁盤
特點:
讀寫速度特別快(源于內存比磁盤快幾個數量級)
數據可能會因為重啟/掉電丟失,所以需要額外持久化機制(RDB/AOF)
maxmemory 是 Redis 配置里的參數,控制進程最多能使用多少內存
max = 最大值
memory = 內存
最大內存限制就是直譯就
allkeys-lru 是一種內存淘汰策略:當內存滿時,淘汰所有 key 里最近最少使用的數據
allkeys = 所有 key 都可能被淘汰
LRU = Least Recently Used(最近最少使用)
所以叫 allkeys-lru = 從所有 key 中按 LRU 淘汰
volatile-lru 是另一種淘汰策略,只淘汰帶過期時間 (TTL) 的 key,按 LRU 算法挑選
volatile = 易失的、不穩定的(這里指帶過期時間的 key)
LRU = 最近最少應用
volatile-lru = 只在帶 TTL 的鍵中用 LRU 淘汰
noeviction = 不淘汰
含義:當內存用完,再有寫請求時直接報錯(讀請求還許可正常執行)
no = 不
eviction = 驅逐、淘汰
noeviction = 不驅逐任何 key
浙公網安備 33010602011771號