【问题标题】:Modeling data in RedisRedis 中的数据建模
【发布时间】:2012-09-20 05:11:25
【问题描述】:

我正在构建一个在 Redis 中实时跟踪许多计数器的系统。每个计数器基本上是特定网址上显示的广告关键字的展示次数和转化详细信息。

即。如果在特定网址上显示 10 个关键字,我需要更新每个关键字的展示次数和转化次数。并且在每次展示 url 时,可能会显示一组不同的 10 个关键字。

即。我需要的基本数据模型类似于

  • > 网址=>
     k1 =>
            impression => 2
            conversion => 1
     k2 =><br>
            impression => 100
            conversion => 8
     .
     .
     k100 (max around 100)</li>
    

我了解 Redis 没有嵌套哈希,因此我无法存储 2 级哈希,如上所示。

解决这个问题的最佳方法是什么?

我想过将 k1-impression 和 k1 转换结合起来,使其成为一个字段

喜欢

  • 网址 =>
       k1-impression => 100
       k1-conversion => 3
       .<br>
       . so on</li>
    

但问题是“k1”、“k2”等的长度很重要(120-150 字节),如果可能的话,我不想复制这些数据以节省内存。

我将如何解决这个问题?

任何帮助将不胜感激。

【问题讨论】:

    标签: memory-management redis


    【解决方案1】:

    如果您的关键字的长度足够长以至于您担心它,您应该对其进行规范化。制作keyword -&gt; id 的散列和id -&gt; keyword 的散列,用于对它们进行编码和解码。然后,您可以拥有 url =&gt; {kw_id:impressions =&gt; 1123, kw_id:conversions =&gt; 28} 形式的每个 url 哈希值。当您开始需要为关键字创建索引时,这也将为您提供很好的服务,例如,一旦您要求在所有 url 中显示前 10 个表现最佳的关键字,您就会立即这样做。

    【讨论】:

    • 谢谢马克。但这是为我的数据建模的最佳方式吗?我可以使用任何其他(集合、列表等)来更有效地做到这一点吗?我刚开始使用 Redis,任何帮助都将不胜感激。再次感谢!
    • 最适合什么情况?您在问题中提到的唯一问题是没有复制关键字文本,这是我设计的。具体取决于您要做什么,所有 redis 数据类型都是有用的,您只需要为工作选择正确的工具。每个 redis 命令都在文档中列出了它的复杂度类。考虑一下您的查询模式,并查看实现这些查询所需的 redis 命令的复杂性。然后只需选择可以最大限度地降低复杂性的结构。
    猜你喜欢
    • 1970-01-01
    • 2011-06-21
    • 2020-07-04
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 2021-05-09
    相关资源
    最近更新 更多