只使用 Redis 而不是 RDBMS 有啥缺点?

Posted

技术标签:

【中文标题】只使用 Redis 而不是 RDBMS 有啥缺点?【英文标题】:What is the disadvantage of just using Redis instead of an RDBMS?只使用 Redis 而不是 RDBMS 有什么缺点? 【发布时间】:2012-06-09 23:57:42 【问题描述】:

因此,例如,如果我尝试实现类似于 Facebook 的 Graph API 的东西,需要非常快速并支持数百万用户,那么仅使用 Redis 而不是 RDBMS 有什么缺点?

谢谢! 乔纳森

【问题讨论】:

【参考方案1】:

使用 Redis 代替传统的 RDBMS 有很多潜在的好处和潜在的缺点。它们确实是非常不同的野兽。

只关注潜在的缺点:

Redis 是一种内存存储:您的所有数据都必须适合内存。 RDBMS 通常将数据存储在磁盘上,并将部分数据缓存在内存中。使用 RDBMS,您可以管理比内存更多的数据。使用 Redis,你不能。

Redis 是一个数据结构服务器。没有查询语言(只有命令),也不支持关系代数。您不能提交即席查询(就像您可以在 RDBMS 上使用 SQL 一样)。开发人员应该预见到所有的数据访问,并且必须设计适当的数据访问路径。失去了很多灵活性。

Redis 提供了 2 个持久性选项:常规快照和仅附加文件。它们都不如提供重做/撤消日志记录、块校验和、时间点恢复、闪回功能等的真正事务服务器那样安全......

Redis 仅在实例级别提供基本安全性(在访问权限方面)。 RDBMS 都提供细粒度的每个对象访问控制列表(或角色管理)。

唯一的 Redis 实例不可扩展。它仅以单线程模式在一个 CPU 内核上运行。要获得可扩展性,必须部署并启动多个 Redis 实例。分发和分片是在客户端完成的(即开发人员必须照顾它们)。如果将它们与唯一的 Redis 实例进行比较,大多数 RDBMS 提供了更高的可扩展性(通常在连接级别提供并行性)。它们是多进程(Oracle、PostgreSQL、...)或多线程(mysql、Microsoft SQL Server、...),利用多核机器。

在这里,我只描述了主要的缺点,但请记住,使用 Redis 也有很多好处(非常快,良好的并发支持,低延迟,协议流水线,易于实现乐观并发模式,良好的可用性/ 复杂度比,Salvatore 和 Pieter 的出色支持,务实的严肃方法,...)

对于您的特定问题(图表),我建议您查看专为存储面向图表的数据而设计的 neo4J 或 OrientDB。

【讨论】:

第 5 点并不完全正确。您仍然可以在 Kubernetes 或任何容器编排平台中实现带集群的 Redis,并且可以实现多读多写集群。【参考方案2】:

我有一些补充: redis 中存在值长度限制。使用redis时,总是要考虑自己的redis K,V大小,尤其是在redis集群中

【讨论】:

以上是关于只使用 Redis 而不是 RDBMS 有啥缺点?的主要内容,如果未能解决你的问题,请参考以下文章

现在最成熟的开源nosql是啥?分别有啥优缺点

使用服务而不是组件有啥优点和缺点?

如果我使用 Array 而不是 Vector,有啥缺点吗?

单一端点而不是 API - 有啥缺点?

与 MongoDB 而不是 Redis 一起使用的 Kue 有啥好的替代品?

现在最成熟的开源nosql是啥?分别有啥优缺点