簡單來講,Redis 就是一個數據庫。
不一樣於傳統數據庫將數據保存在磁盤中,Redis 將數據存在內存中,因此它也常常被叫作內存數據庫;同時 Redis 存儲也被叫作 NoSQL 數據庫、非關係型數據庫。
由於 Redis 將數據保存在內存中,因此讀寫速度會很是快,所以 Redis 被普遍應用作緩存或其餘須要高速讀寫的場景。redis
軟件架構中引入 Redis ,是由於它「又快又強」。數據庫
計算機硬件的速度由低到高:硬盤-網絡-內存-CPU;緩存
在傳統的數據庫中,若是第一次訪問數據庫中的某條數據,一般是比較慢的,由於數據庫須要從硬盤上讀取數據;而 Redis 中的數據保存在了內存中,因此速度會比從磁盤中讀取數據快得多。網絡
因此咱們常常把 Redis 當作緩存:第一次從數據庫中讀取數據,並放入 Redis ,後面直接訪問 Redis 就能夠了。 多線程
在高併發的場景下,Redis 可以承受的訪問極限,是遠遠大於數據庫的,因此咱們能夠考慮把須要高併發讀的數據放到 Redis 中;
好比秒殺功能,短短几秒內可能就會有數十萬筆的訪問,若是直接操做數據庫的話,數據庫可能瞬間就被擊垮了。架構
固然,也不是說全部的場景、全部的數據都適合放進 Redis 中,一般咱們須要考慮如下幾點: 併發
緩存分爲本地緩存和分佈式緩存:app
好比 Guava、Ehcache,甚至把緩存保存到 Map 中,這些都是本地緩存;
本地緩存的特色是輕量、實現簡單,生命週期隨着 JVM 的銷燬而結束;可是若是程序存在多個實例(程序部署多套),每一個實例中的緩存不具備一致性。分佈式
Redis 被稱做分佈式緩存,若是程序存在多個實例,各個實例能夠共用 Redis 中的緩存數據,但同時由於引入了 Redis ,那麼須要保證 Redis 的高可用,架構上更爲複雜。memcached
Memcached 也常常被用做緩存,也是分佈式緩存的一種,那麼它和 Redis 有什麼區別呢?
最後再強調一點,是否要引入 Redis?使用本地緩存仍是分佈式緩存?都需從項目的實際狀況出發;Redis 豐富的數據類型和對持久化的支持,會更加適合咱們的項目。
會點代碼的大叔 | 文【原創】