Redis有哪2種持久化方式?分別的優缺點是什么?
Redis 的重寫 AOF 過程是由后臺子進程 bgrewriteaof 來完成的。
過期刪除策略和內存淘汰策略有什么區別?
- 內存淘汰策略是在內存滿了的時候,redis 會觸發內存淘汰策略,來淘汰一些不必要的內存資源,以騰出空間,來保存新的內容
- 過期鍵刪除策略是將已過期的鍵值對進行刪除,Redis 采用的刪除策略是惰性刪除+定期刪除。
Redis 內存淘汰策略
- noeviction(Redis3.0之后,默認的內存淘汰策略) :當運行內存超過最大設置內存時,不淘汰任何數據,這時如果有新的數據寫入,會報錯通知禁止寫入。
- volatile-random:隨機淘汰設置了過期時間的任意鍵值;
- volatile-ttl:優先淘汰更早過期的鍵值。
- volatile-lru(Redis3.0 之前,默認的內存淘汰策略):淘汰所有設置了過期時間的鍵值中,最久未使用的鍵值;
- volatile-lfu(Redis 4.0 后新增的內存淘汰策略):淘汰所有設置了過期時間的鍵值中,最少使用的鍵值;
- allkeys-random:隨機淘汰任意鍵值;
- allkeys-lru:淘汰整個鍵值中最久未使用的鍵值;
- allkeys-lfu(Redis 4.0 后新增的內存淘汰策略):淘汰整個鍵值中最少使用的鍵值。
Redis過期刪除策略
Redis 選擇「惰性刪除+定期刪除」這兩種策略配和使用
惰性刪除:
Redis 的定期刪除是每隔一段時間「隨機」從數據庫中取出一定數量的 key 進行檢查,并刪除其中的過期key。
默認每秒進行 10 次過期檢查一次數據庫
隨機抽查的數量由 ACTIVE_EXPIRE_CYCLE_LOOKUPS_PER_LOOP 定義的,它是寫死在代碼中的,數值是 20。
Redis的緩存失效會不會立即刪除?
不會
為什么我不過期立即刪除?
在過期 key 比較多的情況下,刪除過期 key 可能會占用相當一部分 CPU 時間,在內存不緊張但 CPU 時間緊張的情況下,將 CPU 時間用于刪除和當前任務無關的過期鍵上,無疑會對服務器的響應時間和吞吐量造成影響。所以,定時刪除策略對 CPU 不友好。
Redis主從同步中的增量和完全同步怎么實現?
為了避免在網絡恢復時,主服務器頻繁地使用全量同步的方式,我們應該調整下repl_backlog_buffer 緩沖區大小,盡可能的大一些。
redis主從和集群可以保證數據一致性嗎 ?
redis 主從和集群在CAP理論都屬于AP模型,即在面臨網絡分區時選擇保證可用性和分區容忍性,而犧牲了強一致性。這意味著在網絡分區的情況下,Redis主從復制和集群可以繼續提供服務并保持可用,但可能會出現部分節點之間的數據不一致。
哨兵機制原理是什么?
哨兵(Sentinel)機制,它的作用是實現主從節點故障轉移。監控、選主、通知。
如果Sentinel集群中超過quorum數量的Sentinel節點認為該redis節點主觀下線,則該redis客觀下線。
首先需要從Sentinel集群中選舉一個Sentinel節點作為Leader。
由Sentinel Leader從redis從節點中選擇一個redis節點作為主節點:
Redis集群的模式了解嗎 優缺點了解嗎
當 Redis 緩存數據量大到一臺服務器無法緩存時,就需要使用 Redis 切片集群(Redis Cluster )方案,它將數據分布在不同的服務器上,以此來降低系統對單主節點的依賴,從而提高 Redis 服務的讀寫性能。
Redis Cluster 方案采用哈希槽(Hash Slot),來處理數據和節點之間的映射關系。在 Redis Cluster 方案中,一個切片集群共有 16384 個哈希槽,這些哈希槽類似于數據分區,每個鍵值對都會根據它的 key,被映射到一個哈希槽中。
優點
- 提供了高可用性,節點之間采用主從復制機制,可以保證數據的持久性和容錯能力,哪怕其中一個節點掛掉,整個集群還可以繼續工作。
- Redis集群采用分片技術,將數據分散到多個節點,從而提高讀寫性能。
- Redis集群的擴展性非常好,可以根據實際需求動態增加或減少節點,從而實現可擴展性。
缺點
- Redis集群的部署和維護需要考慮到分片規則、節點的布置、主從配置以及故障處理等多個方面,需要較強的技術支持,增加了節點異常處理的復雜性和成本。
- 當某些節點失敗或者網絡出故障,集群中數據同步的問題也會出現。數據同步的復雜度和工作量隨著節點的增加而增加,同步時間也較長,導致一定的讀寫延遲。
- Redis集群的數據分片也限制了一些功能的實現,如在一個key上修改多次,可能會因為該key所在的節點位置變化而失敗。此外,由于將數據分散存儲到各個節點,某些操作不能跨節點實現,不同節點之間的一些操作需要額外注意。