32

问题1:我知道Redis将所有数据加载到内存中,从而提高了读写速度。那么,这是否意味着如果我的内存大小为 2G,那么最大数据集大小不应该大于 2G?现在我的数据库有100G+的数据,我的服务器内存不能大于32G,那么Redis不再适合我了?

问题二:Redis 是不是分布式系统?当我使用google搜索redis的CAP属性时,它说Redis不是分布式系统,所以它与CAP无关 。但从Wikipedia中,它说它具有主从架构,一个主有多个从属。多么令人困惑。

4

2 回答 2

63

关于问题 1,Redis 是一种内存存储,具有一些持久性功能。您的所有数据集都应该适合内存。因此,单个实例受到服务器最大内存的限制。现在,您还可以将数据分片到多个 Redis 实例,在多个服务器上运行。如果您有预算,完全有可能在一组 Redis 盒子上存储 100GB - 1TB 的数据。请注意分片不是自动的:它必须由客户端或应用程序实现。它还对您可以对数据执行的操作施加了一些限制(例如,无法在服务器端计算由不同 Redis 实例托管的两个集合的交集)。

关于问题2,单个Redis实例不是分布式系统。它是一个远程集中存储。现在通过使用多个 Redis 实例,您可以构建一个分布式系统。因为它是一种自己动手的方法,所以您可以决定将其设为 CP 或 AP 系统。

单个实例可以将其活动复制到从属实例(因此最终与主实例保持一致)。应用程序可以选择始终连接到主设备进行读写。在这种情况下,您可能会得到一个 CP 系统。它还可以在master上写,从所有实例(包括slave)中读取,所以你可能会得到一个AP系统。我说“可以”,因为在 Redis 之上构建这样的系统需要做一些重要的工作。

您可以混合使用分片和主/从复制来构建您需要的分布式系统。然而,Redis 只提供了基本的砖块来做到这一点。特别是,它确实很少提供处理弹性和 HA(并解决 CAP 定理中的 P)。IMO,仅Redis sentinel不足以支持 HA Redis 配置,因为它仅涵盖角色管理。您需要用资源管理器对其进行补充,并将大量逻辑放入客户端/应用程序中。

有一个正在进行的项目叫做Redis Cluster,其目的是提供一个简约的即用型分布式系统,但它仍然缺乏很多东西,而且还不能用于生产目的。

如果你需要一个现成的分布式存储,Redis 可能不是一个好的选择。Cassandra、Riak、MongoDB、Couchbase、Aerospike、MySQL Cluster、Oracle NoSQL 等将为您提供更好的服务……但是,如果您想构建自己的专业系统,Redis 是一个很好的构建组件。

于 2013-08-22T10:10:06.143 回答
2

这是一个有用的链接,Redis 集群教程

https://redis.io/topics/cluster-tutorial

您还可以从使用 memcache 查看 Facebook 解决方案中受益:

https://engineering.fb.com/web/introducing-mcrouter-a-memcached-protocol-router-for-scaling-memcached-deployments/

于 2019-09-26T09:23:15.950 回答