讀完這篇文章,你就知道爲什麼生產環境大多數要用redis資料庫!

概述

簡單來說 Redis 就是一個數據庫,不過與傳統數據庫不同的是 Redis 的數據是存在內存中的,所以存寫速度非常快,因此 Redis 被廣泛應用於緩存方向。

另外,Redis 也經常用來做分佈式鎖。Redis 提供了多種數據類型來支持不同的業務場景。

除此之外,Redis 支持事務 、持久化、LUA 腳本、LRU 驅動事件、多種集群方案。

下面小編主要從以下幾個方面來解讀 Redis:

  • 為什麼要用 Redis / 為什麼要用緩存
  • 為什麼要用 Redis 而不用 map/guava 做緩存
  • Redis 和 Memcached 的區別

為什麼要用 Redis / 為什麼要用緩存?

這裡我們主要從“高性能”和“高併發”這兩點來看待這個問題。

高性能

讀完這篇文章,你就知道為什麼生產環境大多數要用redis數據庫!

假如用戶第一次訪問數據庫中的某些數據。這個過程會比較慢,因為是從硬盤上讀取的。

將該用戶訪問的數據存在緩存中,這樣下一次再訪問這些數據的時候就可以直接從緩存中獲取了。

操作緩存就是直接操作內存,所以速度相當快。如果數據庫中的對應數據改變了之後,同步改變緩存中相應的數據即可!

高併發

讀完這篇文章,你就知道為什麼生產環境大多數要用redis數據庫!

直接操作緩存能夠承受的請求是遠遠大於直接訪問數據庫的,所以我們可以考慮把數據庫中的部分數據轉移到緩存中去,這樣用戶的一部分請求會直接到緩存這裡而不用經過數據庫。



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

緩存分為本地緩存和分佈式緩存。以 Java 為例,使用自帶的 map 或者 guava 實現的是本地緩存,最主要的特點是輕量以及快速,生命週期隨著 JVM 的銷燬而結束。

並且在多實例的情況下,每個實例都需要各自保存一份緩存,緩存不具有一致性。

使用 Redis 或 Memcached 之類的稱為分佈式緩存,在多實例的情況下,各實例共用一份緩存數據,緩存具有一致性。

缺點是需要保持 Redis 或 Memcached 服務的高可用,整個程序架構上較為複雜。


Redis 和 Memcached 的區別

現在公司一般都是用redis來實現緩存了,為什麼比較少用memcached呢?

Redis 和 Memcached 的區別:

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

來自網絡上的一張對比圖,這裡分享給大家:

讀完這篇文章,你就知道為什麼生產環境大多數要用redis數據庫!


小編記得在最近的數據庫排行榜,redis還是在前十名,這個本身就很說明問題了,真心推薦大家用redis來做緩存,也可以做集群。

PS:後期會分享更多底層的內容,感興趣的朋友可以點下關注哦~

讀完這篇文章,你就知道為什麼生產環境大多數要用redis數據庫!


分享到:


相關文章: