2013-08-25 118 views
1

我听说Redis服务器提供的速度非常快,因此想到将它插入到作为数据库服务器运行在PostgreSQL上的现有Rails应用程序之一。选择Redis密钥名称并限制密钥数量

我的问题是,如果我的系统上有大约100000个用户,并且想要实现跟随者/跟随模式,我可以使用Redis的SET数据类型,但是有一个很好的做法是拥有100000个不同的密钥基于用户。这是在我目前的情况下定义键的正确方法吗?如果是这样,单个redis实例上数字键的限制是多少。

有关更好地设计钥匙的建议值得欢迎。

回答

3

Redis在处理数百万个密钥方面没有问题。理论上的限制是2^32个键(见FAQ),所以实际上可用内存量是唯一的限制因素。

由于Redis原生支持层次结构的两个级别:键和列表/散列/集合,因此每个用户拥有一个键几乎是这种情况下的唯一选项。

Redis使用very compact representation for small sets,所以如果大多数用户只有少数关注者,内存使用率应该相当低。调整*-max-ziplist-*系列配置选项可能会为您的特定数据集提供最佳结果。

顺便说一句,您可能会对Twitter的人们如何处理巨大的追随者生成的负载感兴趣,使用Redis的部分堆栈:real-time delivery architecture谈话非常有趣。

+0

嘿,非常感谢您的回复。 但是,如果我有多个应用程序在使用相同redis实例的服务器上运行,该怎么办?如果我拥有1 GB服务器,您通常可以向我建议我需要遵循的优化级别。 @rkhayrov – swaroopsm

+0

Redis是一个基本的单线程应用程序。所有Redis命令都是以原子方式执行的,并且可以使用'MULTI..EXEC'块或内置的Lua脚本(http://redis.io/topics/transactions)来创建一系列命令。所有这些使得Redis成为多个应用程序实例的优秀消息总线/同步系统。 我不认为一百万用户Rails应用程序可以在1 GB RAM中运行,特别是与RAM缓存RAM竞争:问题是没有意义。只有实验和分析才能说明问题。 – rkhayrov

+0

好的,这是有帮助的,所以你说的方法,2个不同的关键,​​即追随者和以下可以很容易地锻炼约10000用户的规模权利? – swaroopsm