当前位置: 首页 > news >正文

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,所以是否作为主数据库还得看实际的情况而定。

 

我是栈江湖,如果你喜欢此文章,不要忘记点赞+关注

 

相关文章:

  • xv6-labs-2024 lab1
  • QML面试笔记--UI设计篇03导航控件
  • 国内数据安全传送简述
  • python 微信小程序支付、查询、退款使用wechatpy库
  • 神经探针与价值蓝海:AI重构需求挖掘的认知拓扑学
  • 深度学习 Deep Learning 第19章 近似推理
  • 基于SpringBoot的在线拍卖系统(源码+数据库+万字文档+ppt)
  • 【LeetCode 题解】算法:34.在排序数组中查找元素的第一个和最后一个位置
  • Kafka 中的 offset 提交问题
  • Qt 资源文件(.qrc 文件)
  • 基于SpringBoot的“高校社团管理系统”的设计与实现(源码+数据库+文档+PPT)
  • 基于ensp的mpls的解决bgp域内黑洞及MPLS VPN的应用
  • 心脏滴血漏洞(CVE-2014-0160)漏洞复现
  • 探秘PythonJSON解析深度剖析json.loads处理嵌套JSON字符串的奥秘
  • 《UNIX网络编程卷1:套接字联网API》第3章 套接字编程简介
  • MBR的 扩展分区 和 逻辑分区 笔记250407
  • 循环神经网络 - 机器学习任务之同步的序列到序列模式
  • 计算机网络学习前言
  • 八、C++速通秘籍—动态多态(运行期)
  • 【蓝桥杯】搜索算法:剪枝技巧+记忆化搜索
  • 上海市重大工程一季度开局良好,多项生态类项目按计划实施
  • 陕西榆林:全力推进榆林学院升格榆林大学
  • 《克莱默夫妇》导演罗伯特·本顿去世,终年92岁
  • 万科:存续债券均正常付息兑付
  • 上海能源科技发展有限公司原董事长李海瑜一审获刑13年
  • 《淮水竹亭》:一手好牌,为何打成这样