?
張三拍案而起:“Redis 是緩存數據庫,怎么能當主數據庫用?簡直是天方夜譚!”
李四冷笑回應:“你沒用過,憑什么說不行?我已經用 Redis 做主數據庫好幾年了,系統穩定得像鐵板一塊!”
?
這場爭論,早已在技術圈掀起軒然大波。一邊是“傳統派”的質疑,一邊是“創新派”的實戰經驗,雙方各執一詞,誰也說服不了誰。
而你,是否也曾陷入這樣的困惑:Redis 到底能不能勝任主數據庫的角色?
技術的世界瞬息萬變,今天的“不行”,會不會成為明天的“標配”?
?
我們看看 Redis官方是怎么看這個問題的:
一、官方的建議
1.1、Redis創始人 Salvatore Sanfilippo
?
Sanfilippo 在接受采訪時表示
“What Redis is good for is not my choice; it’s the application developer that knows better,” he says, explaining that every application has its goals, guarantees it must provide, and latency and scalability concerns. Sanfilippo says he wants Redis to be used when it solves a problem: be it a primary database, just an index for another database, some smart caching, messaging, or whatever.
翻譯:
“我對于如何使用 Redis 沒有太多發言權,應用開發者比我知道得更清楚”他說,并解釋道:每個應用都有自己的目標,必須提供的保證,以及延遲和可擴展性考慮。Sanfilippo 說,他唯一希望的就是 Redis 可以用于解決問題:無論是作為主數據庫,還是其他數據庫的索引,又或者是智能緩存、消息隊列,等等。
1.2、Redis 官方博文
?
"Redis began as a caching database, but it has since evolved into a primary database. "
Redis最初是一個緩存數據庫,但它已經發展成為一個主數據庫。
當然這段話也透露出另一個信息就是,“However, most Redis service providers support Redis as a cache but not as a primary database. ”。也就是大多數人還是使用 redis 作為緩存而非主數據庫。
不過這篇文章主要是表明官方推薦把 redis 作為主數據庫的態度。
其實官方推薦把 redis 作為主數據庫的文章還不少,這篇也有說到 Redis 作為主數據庫。
?
?
1.3、Redis+AI
?
在 Redis 官網在原本的站內搜索的再進,增加了 AI 對話的功能。我們可以直接向 AI 提問,他會根據官方文檔、博客等資源給我們回答。
?
我問他 redis 作為主數據庫的事,他的回答也是肯定的。
?
二、具體分析
其實站在 Redis 官方的角度,肯定是希望它可以有更多的使用場景與生態。當然他們的推薦肯定還是有一定的技術依據的,不然這觀點是完全站不住的。
我們來看看,一般說 Redis 不能作為主數據庫主要就這幾個原因:
?
2.1、反方觀點
- 內存成本
Redis 的數據存儲在內存中,這意味著它的存儲容量受限于物理內存大小。它需要把所有的業務數據加載到內存中,對于大規模數據存儲,內存的成本遠高于磁盤,且擴展內存容量可能會帶來高昂的硬件成本。雖然可以通過 Redis Cluster 來擴充內存,但仍然解決不了根本的問題。
- 持久化
Redis 的持久化機制(RDB 和 AOF)雖然可以保存數據到磁盤,但存在一定的局限性。比如:RDB 是指定在多少秒內發生多少次數據變化時觸發 RDB 快照。而 AOF 是每秒一次同步一次也就是刷盤。可以看到這兩中同步方式都會存在數據的丟失。當然我們可以說我把同步頻率設置更短一點,那么又會產生新的性能問題,可能得不償失。
- 復雜查詢
Redis 的數據結構(如字符串、哈希、列表 、Json 等)適合快速訪問和緩存,但在處理復雜的關系型數據時并不好。不支持復雜的 SQL 查詢,如連表查詢、聚合查詢等
?
2.2、正方觀點
其實認真看官方的文檔會發現,Redis作為主數據庫與緩存數據庫還是有所區別的。
比如:官方文檔中說到的
However, when deploying Redis as a primary database, it requires specific configurations to ensure data availability and reliability.
和
With Redis open source, you need to set up Redis Sentinel for high availability. In Redis Cloud, it’s a core feature that you just need to turn on when creating the database.
主要意思第一段說Redis要作為主數據庫的話需要特定的配置,第二段說要打開或設置 HA。
所以說Redis 是可以作為主數據庫,不過得在適合下場景中使用。比如通常業務簡單、高性能、低延遲和實時性有較高要求的場景中作為主數據庫。
- 內存成本
權衡性能與內存,哪個是自己更想要的
- 持久化
通過增加硬件組件分布式集群解決內存限制,解決了單機單點的問題也就解決了 RDB 與 AOF 不足的問題。
- 復雜查詢
業務簡單的場景也就沒有太多的復雜查詢,Redis 就足夠了。
?
總結
Redis 可以用作生產上的主數據庫嗎?
答案是:可以,它已經具備了這個能力,當然還是要帶一些條件的。
當然也有不少人選擇一個比較折中的方案就是選擇使用 MongoDB,所以是否作為主數據庫還得看實際的情況而定。
?
我是棧江湖,如果你喜歡此文章,不要忘記點贊+關注!
?