问题1:我知道Redis会将所有数据加载到内存中,从而提高读写速度。那么,这是否意味着如果我的内存大小是2G,那么最大数据集大小不应该大于2G?现在我的数据库有了100G+数据,我的服务器内存不能超过32G,所以Redis不再适合我了?
问题2: Redis是不是分布式系统?当我使用google搜索Redis的CAP属性时,它显示Redis不是一个分布式系统,所以它与CAP没有任何关系。但是来自Wikipedia,它说它有一个主从架构,一个主有许多从。真让人迷惑。
发布于 2013-08-22 18:10:06
关于问题1,Redis是一个具有持久性功能的内存存储。你所有的数据集都应该放在内存中。因此,单个实例会受到服务器最大内存的限制。现在,您还可以将数据分片到多台服务器上运行的多个Redis实例。如果你有足够的预算,在一组Redis机器上存储100 on 1TB的数据是完全可能的。请注意,分片不是自动的:它必须由客户端或应用程序实现。它还对您可以对数据执行的操作施加了一些约束(例如,在服务器端不可能计算不同Redis实例托管的两个集合的交集)。
关于问题2,单个Redis实例不是分布式系统。它是一个远程集中存储。现在,通过使用多个Redis实例,您可以构建一个分布式系统。因为它是一种do方法,所以您可以决定将其作为CP或AP系统。
单个实例可以将其活动复制到从实例(因此最终与主实例一致)。应用程序可以选择始终连接到主设备以进行读写。在这种情况下,您可能会得到CP系统。它还可以在主服务器上写入,并从所有实例(包括从服务器)读取,因此您可以获得AP系统。我之所以说“可能”,是因为在Redis上构建这样的系统需要做一些重要的工作。
您可以混合使用分片和主备复制来构建您需要的分布式系统。然而,Redis只提供了基本的砖块来实现这一点。特别是,它对处理弹性和HA (并解决CAP定理中的P)提供的帮助很少。Redis sentinel本身不足以支持HA Redis配置,因为它只涵盖角色管理。您需要使用资源管理器对其进行补充,并将大量逻辑放入客户端/应用程序中。
有一个叫Redis Cluster的项目正在进行中,它的目的是提供一个最简单的、随时可用的分布式系统,但它仍然缺乏很多东西,还不能用于生产目的。
如果你需要一个现成的分布式存储,Redis可能不是一个好的选择。Cassandra,Riak,MongoDB,Couchbase,Aerospike,MySQL集群,甲骨文NoSQL等会更好地为你服务。但是,如果您想构建自己的专用系统,Redis是一个很好的构建组件。
发布于 2019-09-26 17:23:16
这是一个有用的链接,Redis集群教程
您还可以从使用memcache的Facebook解决方案中获益
https://stackoverflow.com/questions/18376665
复制相似问题