Redis,分发与否?

时间:2013-08-22 09:33:27

标签: nosql redis distributed

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

问题2: Redis是否是分布式系统?当我使用谷歌搜索redis的CAP属性时,它说Redis不是分布式系统,因此,它与CAP无关 。但是从Wikipedia开始,它说它有一个主从架构,一个有很多奴隶的主人。 多么令人困惑。

2 个答案:

答案 0 :(得分:44)

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

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

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

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

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

如果您需要现成的分布式商店,Redis可能不是一个好选择。 Cassandra,Riak,MongoDB,Couchbase,Aerospike,MySQL Cluster,Oracle NoSQL等将为您提供更好的服务......但是,如果您想构建自己的专用系统,Redis是构建的优秀组件。

答案 1 :(得分:1)

这是一个有用的链接, Redis Cluster Tutorial

  

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

您可能还会受益于查看具有内存缓存的 Facebook解决方案

  

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