Redis、Guava、Memcached,我爲何選擇了 Redis?

簡單來講,Redis 就是一個數據庫。web


不一樣於傳統數據庫將數據保存在磁盤中,Redis 將數據存在內存中,因此它也常常被叫作內存數據庫;同時 Redis 存儲也被叫作  NoSQL 數據庫、非關係型數據庫。數據庫


由於 Redis 將數據保存在內存中,因此讀寫速度會很是快,所以 Redis 被普遍應用作緩存或其餘須要高速讀寫的場景。緩存



01
爲何要使用 Redis



軟件架構中引入 Redis ,是由於它「又快又強」。微信


1. 快,是指性能高網絡


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


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


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


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


在高併發的場景下,Redis 可以承受的訪問極限,是遠遠大於數據庫的,因此咱們能夠考慮把須要高併發讀的數據放到 Redis 中;分佈式


好比秒殺功能,短短几秒內可能就會有數十萬筆的訪問,若是直接操做數據庫的話,數據庫可能瞬間就被擊垮了。



02
哪些場景不適合放入 Redis



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


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



03
本地緩存 or Redis



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


1. 本地緩存


好比 Guava、Ehcache,甚至把緩存保存到 Map 中,這些都是本地緩存;


本地緩存的特色是輕量、實現簡單,生命週期隨着 JVM 的銷燬而結束;可是若是程序存在多個實例(程序部署多套),每一個實例中的緩存不具備一致性。


2. 分佈式緩存


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



04
Redis or Memcached



Memcached 也常常被用做緩存,也是分佈式緩存的一種,那麼它和 Redis 有什麼區別呢?


  • Redis 支持更豐富的數據類型,Memcache 支持簡單的數據類型String;

  • Redis 支持數據的持久化,能夠將內存中的數據保存到硬盤中,重啓以後把數據加載到內存中,而 Memcache  只是把數據保存在內存中 ;

  • Redis 目前支持集羣模式,而 Memcached 沒有原生的集羣模式,須要使用方本身實現;

  • Redis 使用單線程的多路 IO 複用模型(Redis 在最新的 6.0 版本中開始支持多線程);Memcached 使用的是多非阻塞IO複用的網絡模型。



最後再強調一點,是否要引入 Redis?使用本地緩存仍是分佈式緩存?都需從項目的實際狀況出發;Redis 豐富的數據類型對持久化的支持,會更加適合咱們的項目。


本文分享自微信公衆號 - 會點代碼的大叔(CodeDaShu)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索