redis — 持久化機制與內存淘汰策略(二)

1. 存儲數據結構

Redis 總的以 HashTable 存儲,內部存儲 5 種數據結構。

  • Key-String 字符串存儲;
  • Key-List 列表存儲;
  • Key-Hash 哈希存儲;
  • Key-Set 集合存儲;
  • Key-Zset 有序集合存儲。

在這裏插入圖片描述
其他高級命令:
keys 全量遍歷鍵(謹慎使用) scan 漸進式遍歷鍵 >scan 0 match * count 1000 從遊標位置,匹配 1000 條記錄,返回遊標加集合 >scan p1 match p2 count p3 其中,3 個參數,p1:遊標,p2:匹配內容,p3:查詢數量。

2.特點、實現&部分配置

2.1 特點

  • 連接請求使用單線程,無線程間切換損耗 此處注意,單線程只是接收命令的入口使用單線程。還有其他線程用於處理持久化,AOF 重寫以及其他操作。
  • I/O多路複用
  • 內存數據,基本操作在納秒級別。緩存數據被存在內存中,訪問速度非常迅速。但需要注意的是,避免使用消耗資源較大的命令,如 keys ,若數據量小時沒問題,如果數據量非常龐大時,將會影響 Redis 的性能,比如數據的傳輸變慢,佔用內存飆高,CPU 上升等問題。

2.2 Redis持久化機制與內存淘汰策略

  • 快照持久化:
    默認開啓,配置快照持久化後,會生成一個快照文件(相當於將數據打包並且壓縮備份好,默認:dump.rdb),並可以配置生成快照文件的頻率。啓動加載 RDB 文件。 配置文件名與文件保存地址。
  • AOF 持久化:
    默認關閉,開啓此配置後,將會生成一個 AOF 文件,內部記錄的 Redis 啓動後執行的所有命令。啓動執行 AOF 文件內的命令。
    1.首先開啓配置:appendonly yes
    2.配置文件名: appendfilename “appendonly.aof” 生成文件目錄與 RDB 路徑相同

AOF 文件的生成規則:
在這裏插入圖片描述
這樣的配置,涉及持久化文件的重寫,配置:

  1. 文件擴大 100% 的時候重寫;
  2. 文件大於 64M 的時候才能觸發重寫動作。
    這裏所說的重寫是指,Redis 啓動後,除了生成快照的持久化,還有 AOF 記錄命令的持久化,當 AOF 文件過大,且達到重寫的條件後,將 AOF 內的命令與 RDB 文件結合,重新生成 RDB,而 AOF 內的命令將會清除,開始記錄新的命令。
  • 持久化文件有了,並且理論上大小不限,那麼 Redis 的數據就要收到內存的限制了,那麼是否會將內存撐爆呢?
    在這裏插入圖片描述
    查看內存管理模塊,可以看到一大部分註釋,最後一行,默認是註釋掉的,就相當於不限制 Redis 的內存使用,那麼如果數據了持久增加的情況下,內存會爆掉。可以適當設置內存的大小,比如設置 8GB,在集羣的情況下,不需要設置太高,保持良好性能。

  • 設置好了內存大小限制,那麼當內存滿了之後,Redis 將會如何處理呢?
    此時,需要提供緩存淘汰策略了,配置當內存達到最大時,按照一定規則去刪除內存中舊的值。
    在這裏插入圖片描述
    Redis 提供了多種緩存淘汰策略。LRU:表示最近最少使用; LFU:表示最不常用的。
    區別在於:LFU 是一定時間內訪問最少的,比如 10 分鐘內訪問最少的,而 LRU 則是指服務啓動後,訪問量最少的內容。 下面按順序說明下淘汰策略:

    1. 篩選出設置了有效期的,最近最少使用的 key;
    2. 所有 key 中,篩選出最近最少使用的 key;
    3. 篩選出設置了有效期的,最不常用的 key;
    4. 所有 key 中,篩選出最不常用的 key ;
    5. 隨機篩選出設置了有效期的 key;
    6. 所有 key 中,隨機篩選出 key進行刪除;
    7. 篩選出所有設置有效期的 key 中,有效期最短的 key;
    8. 拒絕策略,當內存滿了之後,服務不做任何處理,直接返回一個錯誤 Redis 默認是拒絕策略,可根據實際情況做出設置。
  • 這樣做的目的是什麼呢?
    在 Redis 服務重啓時,快照數據恢復的時間,比 AOF 一行行執行命令快;
    AOF 是實時記錄 Redis 執行的命令的,不會造成命令丟失,而快照是要滿足一定條件才能出發(如,記錄變動了 1 次,不滿足更新快照的條件,此時服務宕機了,那麼重啓時,這次變動的數據就丟失了,而 AOF 記錄下了執行的命令)。這樣就防止了數據的丟失;
    快速恢復快照的內容,之後再執行剩餘的 AOF 內的命令,完整恢復數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章