Redis到底能不能做主數據庫?

?

張三拍案而起:“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,所以是否作為主數據庫還得看實際的情況而定。

?

我是棧江湖,如果你喜歡此文章,不要忘記點贊+關注

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/76010.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/76010.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/76010.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

flutter 項目結構目錄以及pubspec.ymal等文件描述

在Flutter項目中,目錄結構和pubspec.yaml文件是非常重要的組成部分,它們定義了項目的結構、依賴管理以及如何構建和運行項目。下面我將詳細解釋這些關鍵元素: 1. Flutter項目目錄結構 Flutter項目的標準目錄結構通常如下所示: …

CentOS 環境下 MySQL 數據庫全部備份的操作指南

最近阿里云個人服務到期,因為是很久之前買的測試機器,配置較低,上面運行的有技術博客 和以往的測試項目,所以準備放棄掉。 需要備份下上面的表結構和數據、以及代碼倉庫。 下面是一個完整的 CentOS 環境下 MySQL 數據庫全部備份…

ecplise 工具 沒有Java EE Tools 選項

Java EE Tools 是將項目轉換為web項目的重要的快捷鍵,如果進行web開發 那是不可或缺的 該工具是一個插件,可以作為插件安裝到ecplise上 安裝步驟如下: 找到help-->install new software 在彈出的頁面中 work with中輸入:Jun…

544 eff.c 1761 優化設計文檔

1:性能分析 1.1性能對比 oneapi 與hygonGcc性能對比發現,544課題中的eff.c 1761循環處,oneapi 進行了循環向量化, gcc使用標量,循環源碼前加 #pragma clang loop vectorize(disable) 找出oneapi在該循環處關閉和開啟loop vect 的性能差距&a…

LeetCode.3396.使數組元素互不相同所需的最少操作次數

3396. 使數組元素互不相同所需的最少操作次數 給你一個整數數組 nums,你需要確保數組中的元素 互不相同 。為此,你可以執行以下操作任意次: 從數組的開頭移除 3 個元素。如果數組中元素少于 3 個,則移除所有剩余元素。 注意&…

【已完結STM32】--自學江協科技筆記匯總

以下學習筆記代碼均來自b站江協科技視頻 筆記匯總完結 文章筆記對應江科大視頻新建工程【2-2】新建工程江科大STM32-GPIO輸出 點亮LED,LED閃爍,LED流水燈,蜂鳴器(學習筆記)_unit32-t rcc-apb2periph-CSDN博客 【3-1】…

QML Loader:加載組件與狀態監控

目錄 引言相關閱讀工程結構示例一:從文件加載組件 (LoaderFile.qml)代碼實現被加載的組件:MyComponent.qml代碼解析運行效果 示例二:直接加載Component對象 (LoaderComponent.qml)代碼實現代碼解析運行效果 示例三:監控加載狀態 (…

K8S核心技術點

Pod,Service和Deployment的關系 Pod:Kubernetes 中最小的部署單元,用于運行容器化應用。 Service:提供服務發現和負載均衡,為 Pod 提供穩定的網絡端點,ClusterIP,NodePort,LoadBala…

Spring 核心注解深度解析:@Autowired、@Repository 與它們的協作關系

引言 在 Spring 框架中,?依賴注入(DI)?? 是實現松耦合架構的核心機制。Autowired 和 Repository 作為兩個高頻使用的注解,分別承擔著 ?依賴裝配? 和 ?數據訪問層標識? 的關鍵職責。本文將深入探討它們的功能特性、協作模式…

[Linux]從零開始的ARM Linux交叉編譯與.so文件鏈接教程

一、前言 最近在項目需要將C版本的opencv集成到原本的代碼中從而進行一些簡單的圖像處理。但是在這其中遇到了一些問題,首先就是原本的opencv我們需要在x86的架構上進行編譯然后將其集成到我們的項目中,這里我們到底應該將opencv編譯為x86架構的還是編譯…

svelte+vite+ts+melt-ui從0到1完整框架搭建

框架太“重”了:通常一個小型項目只由少數幾個簡單頁面構成,如果使用 Vue 或者 React 這些框架來研發的話,有點“大材小用”了。構建的產物中包含了不少框架運行時代碼(虛擬 DOM、響應式、狀態管理等),這些代碼對于小型項目而言是…

無法看到新安裝的 JDK 17

在 Linux 系統中使用 update-alternatives --config java 無法看到新安裝的 JDK 17,可能是由于 JDK 未正確注冊到系統備選列表中。 一、原因分析 JDK 未注冊到 update-alternatives update-alternatives 工具需要手動注冊 JDK 路徑后才能識別新版本。如果僅安裝 JDK…

鼎訊信通 便攜式雷達信號干擾模擬器:打造實戰化電磁環境的新利器

在現代戰爭中,電磁環境的復雜性直接影響著雷達裝備的性能和作戰效果。面對敵方日益精進的電子戰手段,如何提升雷達設備的抗干擾能力,確保其在實戰環境中的穩定性和可靠性,已成為各國軍隊和科研機構的重要課題。 為此,…

【AI提示詞】決策專家

提示說明 決策專家可以幫助你進行科學決策,盡可能避免錯誤,提升決策成功的概率。 提示詞 # Role : 決策專家決策,是面對不容易判斷優劣的幾個選項,做出正確的選擇。說白了,決策就是拿個主意。決策專家是基于科學決策…

力扣Hot100題,刷題

力扣HOT100 - 1. 兩數之和 解題思路&#xff1a; 解法一&#xff1a;暴力 class Solution {public int[] twoSum(int[] nums, int target) {int n nums.length;for (int i 0; i < n; i)for (int j i 1; j < n; j) {if (target nums[i] nums[j])return new int[]…

uni-app ucharts自定義換行tooltips

實現效果&#xff1a; 第一步&#xff1a;在uni_modules文件夾下找到config-ucharts.js和u-charts.js文件 第二步&#xff1a;在config-ucharts.js文件中配置換行格式 // 換行格式"wrapTooltip":function(item, category, index, opts){return item.name&#xff1a;…

國標GB28181視頻平臺EasyCVR順應智慧農業自動化趨勢,打造大棚實時視頻監控防線

一、方案背景 近年來&#xff0c;溫室大棚種植技術憑借其顯著的優勢&#xff0c;在提升農作物產量和質量、豐富農產品供應方面發揮了重要的作用&#xff0c;極大改善了人們的生活水平&#xff0c;得到了廣泛的推廣和應用。大棚內的溫度、濕度、光照度和二氧化碳濃度等環境因素…

InternVideo2.5:Empowering Video MLLMs with Long and Rich Context Modeling

一、TL&#xff1b;DR InternVideo2.5通過LRC建模來提升MLLM的性能。層次化token壓縮和任務偏好優化&#xff08;mask時空 head&#xff09;整合到一個框架中&#xff0c;并通過自適應層次化token壓縮來開發緊湊的時空表征MVBench/Perception Test/EgoSchema/MLVU數據benchmar…

【時時三省】(C語言基礎)條件運算符和條件表達式

山不在高&#xff0c;有仙則名。水不在深&#xff0c;有龍則靈。 ----CSDN 時時三省 有一種if語句&#xff0c;當被判別的表達式的值為“真”或“假”時&#xff0c;都執行一個賦值語句且向一個變量賦值。 如&#xff1a; if ( a > b ) max a&#xff1b; else max …

KWDB創作者計劃—邊緣計算:從概念到落地的技術解讀

引言 隨著物聯網&#xff08;IoT&#xff09;和人工智能&#xff08;AI&#xff09;的快速發展&#xff0c;數據量呈爆炸式增長&#xff0c;傳統的云計算架構逐漸暴露出延遲高、帶寬占用大等問題。邊緣計算作為一種新興的分布式計算范式&#xff0c;正在改變數據處理的方式。本…