Guava、Memcached 和 Redis,咱們爲何選擇了 Redis?

簡單來講,Redis 就是一個數據庫。
不一樣於傳統數據庫將數據保存在磁盤中,Redis 將數據存在內存中,因此它也常常被叫作內存數據庫;同時 Redis 存儲也被叫作 NoSQL 數據庫、非關係型數據庫。
由於 Redis 將數據保存在內存中,因此讀寫速度會很是快,所以 Redis 被普遍應用作緩存或其餘須要高速讀寫的場景。redis

爲何要使用 Redis

軟件架構中引入 Redis ,是由於它「又快又強」數據庫

1. 快,是指性能高

計算機硬件的速度由低到高:硬盤-網絡-內存-CPU;緩存

在傳統的數據庫中,若是第一次訪問數據庫中的某條數據,一般是比較慢的,由於數據庫須要從硬盤上讀取數據;而 Redis 中的數據保存在了內存中,因此速度會比從磁盤中讀取數據快得多。網絡

因此咱們常常把 Redis 當作緩存:第一次從數據庫中讀取數據,並放入 Redis ,後面直接訪問 Redis 就能夠了。 多線程

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

在高併發的場景下,Redis 可以承受的訪問極限,是遠遠大於數據庫的,因此咱們能夠考慮把須要高併發讀的數據放到 Redis 中;
好比秒殺功能,短短几秒內可能就會有數十萬筆的訪問,若是直接操做數據庫的話,數據庫可能瞬間就被擊垮了。架構

哪些場景不適合放入 Redis

固然,也不是說全部的場景、全部的數據都適合放進 Redis 中,一般咱們須要考慮如下幾點: 併發

  • 數據查詢的命中率高麼?若是緩存的命中率很低,沒有必要放入到 Redis 中;
  • 數據讀寫操做多麼?若是數據會被頻繁寫入(增、改、刪),設置寫操做次數大於讀操做次數,那麼也沒有必要使用 Redis ;
  • 業務數據大小如何?若是要儲存文件,那徹底沒有必要放入到 Redis 中。

本地緩存 or Redis

緩存分爲本地緩存和分佈式緩存:app

1. 本地緩存

好比 Guava、Ehcache,甚至把緩存保存到 Map 中,這些都是本地緩存;
本地緩存的特色是輕量、實現簡單,生命週期隨着 JVM 的銷燬而結束;可是若是程序存在多個實例(程序部署多套),每一個實例中的緩存不具備一致性。分佈式

2. 分佈式緩存

Redis 被稱做分佈式緩存,若是程序存在多個實例,各個實例能夠共用 Redis 中的緩存數據,但同時由於引入了 Redis ,那麼須要保證 Redis 的高可用,架構上更爲複雜。memcached

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 豐富的數據類型和對持久化的支持,會更加適合咱們的項目。

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


敬請關注會點代碼的大叔
敬請關注會點代碼的大叔
相關文章
相關標籤/搜索