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.mzph.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;正在改变数据处理的方式。本…