【问题标题】:Choosing Redis key names and limit on the number of keys选择 Redis 键名和键数限制
【发布时间】:2013-08-28 01:36:01
【问题描述】:

我听说了很多关于 Redis 服务器提供的超快速度的信息,因此想到将它插入我现有的 Rails 应用程序之一,该应用程序在 PostgreSQL 上作为数据库服务器运行。

我的问题是,如果我的系统上有大约 100000 个用户并且想要实现一个追随者/追随者模式,我可以使用 Redis 的 SET 数据类型左右。但是拥有 100000 个不同的密钥是一个好习惯吗?在用户上。这是在我当前场景中定义键的正确方法吗?如果是这样,单个redis实例上的数字键限制是多少。

欢迎提出更好的按键设计建议。

【问题讨论】:

    标签: ruby-on-rails postgresql nosql redis


    【解决方案1】:

    Redis 在处理数百万个键方面没有任何问题。理论上的限制是 2^32 个键(请参阅 FAQ),因此实际上可用内存量是唯一的限制因素。

    由于 Redis 本身仅支持两个层次结构:键和列表/哈希/集,因此在这种情况下,每个用户拥有一个键几乎是唯一的选择。

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

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

    【讨论】:

    • 您好,非常感谢您的回复。但是,如果我在使用同一个 redis 实例的服务器上运行多个应用程序怎么办。如果我有一个 1 GB 的服务器,你通常能建议我需要遵循什么级别的优化吗? @rkhayrov
    • Redis 本质上是一个单线程应用程序。所有 Redis 命令都是原子执行的,您可以使用 MULTI..EXEC 块或内置 Lua 脚本 (redis.io/topics/transactions) 使一系列命令原子化。所有这一切使 Redis 成为适用于多个应用程序实例的优秀消息总线/同步系统。我不认为百万用户的 Rails 应用程序可以在 1 GB RAM 中运行,尤其是与 DB 缓存竞争 RAM:这个问题没有实际意义。只有实验和分析才能说明问题。
    • 好的,这很有帮助,所以你说 2 个不同的键,即追随者和追随者可以轻松锻炼大约 10000 名用户的规模,对吧?
    • 当然。最大的负担将不是通过保存关注者记录来产生,而是通过向关注者分发消息/更新(或收集和组装来自关注用户的提要)——这是值得思考的部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 2022-01-27
    • 2023-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多