緩存:分佈式緩存優缺點、適用場景與實現分析(二)

前言

上一篇文章我們分析了本地緩存的相關優缺點、適用場景以及實現:

在這裡我們繼續分析分佈式緩存的相關知識點。

分佈式緩存的優缺點

1. 支持大數據量存儲,不受應用進程重啟影響

  • 分佈式緩存由於是獨立部署的進程,擁有自身獨立的內存空間,不會受到應用進程重啟的影響,在應用進程重啟時,分佈式緩存的數據依然存在。同時對於數據量而言,由於不需要佔用應用進程的內存空間,並且一般支持以集群的方式拓展,故可以進行大數據量的數據緩存。

2. 數據集中存儲,保證數據一致性

  • 當應用進程採用集群方式部署時,集群的每個部署節點都通過一個統一的分佈式緩存進行數據存取操作,故不存在本地緩存中的數據更新問題,保證了不同節點的應用進程的數據一致性問題。

3. 數據讀寫分離,高性能,高可用

  • 分佈式緩存一般支持數據副本機制,可以實現讀寫分離,故可以解決高併發場景中的數據讀寫性能問題。並且由於在多個緩存節點冗餘存儲數據,提高了緩存數據的可用性,避免某個緩存節點宕機導致數據不可用問題。

3. 數據跨網絡傳輸,性能低於本地緩存

  • 由於分佈式緩存是獨立部署的進程,並且一般都是與應用進程位於不同的機器,故需要通過網絡來進行數據傳輸,這樣相對於本地緩存的進程內部的數據讀取操作,性能會較低。

分佈式緩存的實現

  • 分佈式緩存的典型實現包括 MemCached 和 Redis。

MemCached

  • MemCached 相對於本地緩存的主要差別是以獨立進程方式存在,數據集中存儲,數據不隨應用程序的重啟而丟失。而 key-value 鍵值對的 value 也是一個簡單的對象類型,即 value 可以是任意格式的數據,如簡單的數字、字符串、對象等,也可以是文件、圖像、視頻等複雜格式的數據,但是不支持數據結構的特性。
  • 所以 MemCached 進程相當於是在內存維護了一個非常大的哈希表來存儲數據,對應的數據操作複雜度都是 O(1),即常量級別,這也是 MemCached 高性能的一個實現方式,鍵值對存取速度都非常快。

Redis

  • Redis 是在此基礎上,更一步豐富了key-value 鍵值對的 value 的數據結構類型,即可以在 Redis 中完成 value 的相關數據操作,如 Set 集合去重、有序集合 ZSet 實現數據排序等,這樣就不需要在應用程序額外進行這些操作,實現了開箱即用。並且 Redis 是單線程的,不存在併發數據讀寫的線程安全問題,以及更重要的是保證的數據讀寫操作的順序性。
  • 除此之外,Redis 支持主從同步(讀寫分離)、集群分片拓展、數據持久化等特性,這也是 MemCached 不支持的。所以在高併發場景並且數據能夠容忍極端情況下的少量丟失,或者說丟失後可以恢復,如通過日誌或者重新計算等, Redis 也可以作為數據庫來使用,提高高併發場景中的訪問性能。


分享到:


相關文章: