持久化方案
RDB(redis db)
預設開啟
配置持久化:save 300 10 、dbfilename dump.rdb (打開 redis.conf 檔案 找到 SNAPSHOTTING 對應内容save 300 10 2 指定本地資料庫檔案名,一般采用預設的 dump.rdb
fork子程序
問題: Copy On Write 子程序就會占有和主程序一樣的記憶體資源,比如說主程序8G記憶體,那麼在備份的時候必須保證有16G的記憶體
手動 持久化
save(目前程序)
bgsave(fork)
AOF(append only file)
在使用aof和rdb方式時,如果redis重新開機,則資料從aof檔案加載
開啟aof方式:appendonly yes;appendfilename appendonly.aof;appendfsync everysec
AOF開啟的話,重新開機redis伺服器從aof中恢複
緩存問題
緩存穿透
查詢資料庫一定沒有的資料,redis肯定沒有,每一次請求都會發到資料庫
将null緩存、布隆過濾器
緩存雪崩
緩存在同一時間大面積失效,叫做緩存雪崩
緩存時間相同的,失效的時間也是相同的-->緩存多個key的時候,把時間錯開
緩存預熱
redis啟動的時候預先緩存一部分資料(預期到很快會通路)
過期政策與記憶體淘汰機制
過期政策
惰性删除 get的時候,發現已經過期了,删除
定時删除(每一個key都加一個定時器)
定期删除(總共就有一個定時器)
記憶體淘汰機制
no-enviction(驅逐):禁止驅逐資料,新寫入操作會報錯
allkeys-lru:從資料集中挑選最近最少使用的資料淘汰
allkeys-random:從資料集中任意選擇資料淘汰
volatile-lru:從已設定過期時間的資料集中挑選最近最少使用的資料淘汰
volatile-random:從已設定過期時間的資料集中任意選擇資料淘汰
volatile-ttl:從已設定過期時間的資料集中挑選将要過期的資料淘汰