1. 程式人生 > 程式設計 >Guava、Memcached 和 Redis,我們為什麼選擇了 Redis?

Guava、Memcached 和 Redis,我們為什麼選擇了 Redis?

簡單來說,Redis 就是一個資料庫。
不同於傳統資料庫將資料儲存在磁碟中,Redis 將資料存在記憶體中,所以它也經常被叫做記憶體資料庫;同時 Redis 儲存也被叫做 NoSQL 資料庫、非關係型資料庫。
因為 Redis 將資料儲存在記憶體中,所以讀寫速度會非常快,因此 Redis 被廣泛應用做快取或其他需要高速讀寫的場景。

為什麼要使用 Redis

軟體架構中引入 Redis ,是因為它“又快又強”

1. 快,是指效能高

計算機硬體的速度由低到高:硬碟-網路-記憶體-CPU;

在傳統的資料庫中,如果第一次訪問資料庫中的某條資料,通常是比較慢的,因為資料庫需要從硬碟上讀取資料;而 Redis 中的資料儲存在了記憶體中,所以速度會比從磁碟中讀取資料快得多。

所以我們經常把 Redis 當做快取:第一次從資料庫中讀取資料,並放入 Redis ,後面直接訪問 Redis 就可以了。

2. 強,是指高併發場景下的穩定性(高可用)

在高併發的場景下,Redis 能夠承受的訪問極限,是遠遠大於資料庫的,所以我們可以考慮把需要高併發讀的資料放到 Redis 中;
比如秒殺功能,短短几秒內可能就會有數十萬筆的訪問,如果直接操作資料庫的話,資料庫可能瞬間就被擊垮了。

哪些場景不適合放入 Redis

當然,也不是說所有的場景、所有的資料都適合放進 Redis 中,通常我們需要考慮以下幾點:

  • 資料查詢的命中率高麼?如果快取的命中率很低,沒有必要放入到 Redis 中;
  • 資料讀寫操作多麼?如果資料會被頻繁寫入(增、改、刪),設定寫操作次數大於讀操作次數,那麼也沒有必要使用 Redis ;
  • 業務資料大小如何?如果要儲存檔案,那完全沒有必要放入到 Redis 中。

本地快取 or Redis

快取分為本地快取和分散式快取:

1. 本地快取

比如 Guava、Ehcache,甚至把快取儲存到 Map 中,這些都是本地快取;
本地快取的特點是輕量、實現簡單,生命週期隨著 JVM 的銷燬而結束;但是如果程式存在多個例項(程式部署多套),每個例項中的快取不具有一致性。

2. 分散式快取

Redis 被稱作分散式快取,如果程式存在多個例項,各個例項可以共用 Redis 中的快取資料,但同時因為引入了 Redis ,那麼需要保證 Redis 的高可用,架構上更為複雜。

Redis or Memcached

Memcached 也經常被用作快取,也是分散式快取的一種,那麼它和 Redis 有什麼區別呢?

  • Redis 支援更豐富的資料型別,Memcache 支援簡單的資料型別String;
  • Redis 支援資料的持久化,可以將記憶體中的資料儲存到硬碟中,重啟之後把資料載入到記憶體中,而 Memcache 只是把資料儲存在記憶體中 ;
  • Redis 目前支援叢集模式,而 Memcached 沒有原生的叢集模式,需要使用方自己實現;
  • Redis 使用單執行緒的多路 IO 複用模型(Redis 在最新的 6.0 版本中開始支援多執行緒);Memcached 使用的是多非阻塞IO複用的網路模型。
Redis 和 Memcache  的區別
Redis 和 Memcache 的區別

最後再強調一點,是否要引入 Redis?使用本地快取還是分散式快取?都需從專案的實際情況出發;Redis 豐富的資料型別和對持久化的支援,會更加適合我們的專案。

會點程式碼的大叔 | 文【原創】


敬請關注會點程式碼的大叔
敬請關注會點程式碼的大叔