為什麼要用 redis 而不用 map

為什麼要用 redis 而不用 map/guava 做緩存?

緩存分為本地緩存和分佈式緩存。以 Java 為例,使用自帶的 map 或者 guava 實現的是本地緩存,最主要的特點是輕量以及快速,生命週期隨著 jvm 的銷燬而結束,並且在多實例的情況下,每個實例都需要各自保存一份緩存,緩存不具有一致性。

使用 redis 或 memcached 之類的稱為分佈式緩存,在多實例的情況下,各實例共用一份緩存數據,緩存具有一致性。缺點是需要保持 redis 或 memcached 服務的高可用,整個程序架構上較為複雜。

redis 和 memcached 的區別

對於 redis 和 memcached 主要有以下四點的區別:

  1. redis 支持更豐富的數據類型(支持更復雜的應用場景):Redis 不僅僅支持簡單的 k/v String 類型的數據,同時還提供 list,set,zset,hash 等數據結構的存儲。memcache 僅支持簡單的數據類型:String
  2. redis 支持數據的持久化,可以將內存中的數據保持在磁盤中,重啟的時候可以再次加載進行使用,而 Memecache 只是把數據全部存在內存之中
  3. 集群模式
    :memcached 沒有原生的集群模式,需要依靠客戶端來實現往集群中分片寫入數據;但是 redis 目前是原生支持 cluster 模式的
  4. Memcached 是多線程,非阻塞 IO 複用的網絡模型;Redis 使用的是單線程的多路 IO 複用模型
為什麼要用 redis 而不用 map/guava 做緩存?

redis 和 memcached 的區別


分享到:


相關文章: