【问题标题】:Best practice to save object in cache将对象保存在缓存中的最佳实践
【发布时间】:2015-12-02 17:47:00
【问题描述】:

我使用 Redis 作为缓存服务 (Key=>Value) @ AWS ElastiCache。

我想在缓存中保存一个包含嵌套对象的对象:

  • Object1 - 包含 Object2 的实例

我显然是在序列化我的对象 - 让我们对 JSON 说这件事 - 所以我的序列化对象看起来像这样:

{
 "property1":"property1",
 "property2":"property2",
 "property2":"property3", 
 "object2":{ 
       object2
        }
}

我想知道以下选项的最佳做法是什么:

  1. 在我的密钥下将整个 object1 存储为完整的 JSON。
  2. 使用自己的键存储 object2 并在我的 object1 序列化中将 object2 键作为引用,当从缓存中拉回时,也通过它的键拉出 object2。

我的直觉认为选项 1 是最佳实践和最有效的方法,但我不考虑在键下存储大型嵌套对象。

【问题讨论】:

    标签: json caching amazon-web-services redis


    【解决方案1】:

    对于您的方案没有通用的最佳解决方案。这取决于您需要如何查询数据。

    如果您总是从您的服务或客户端获取根对象,那么实际上您将整个 JSON 存储在一个字符串键中是正确的。

    另一方面,如果您还需要查询关联对象,则需要将每个整个对象图存储在字符串键中,但您还需要将每个关联对象存储在哈希 parentobject:[id] 和整个哈希将在那里存储直接关联,其中键是关联的对象标识符,值是关联的 JSON 序列化对象。

    根据您想要查询根对象和关联对象的方式,您需要在集合、排序集合和/或列表,甚至其他哈希中对它们进行索引。

    正如我上面所说,没有明确的解决方案,但您需要进行良好的案例研究并仔细考虑如何将数据存储在 Redis 中,因为糟糕的数据存储设计可能会给您带来无尽的痛苦项目。

    将 Redis 视为数据索引。就像您要手动实现关系数据库索引一样。

    【讨论】:

    • 如果您采用“root”方法,则可以通过存储压缩的 JSON 值或使用更高效的协议(如 msgpack)来节省 RAM
    • @ItamarHaber 是的,就我而言,我正在“压缩”JSON 字符串
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    • 2010-10-31
    • 2022-10-18
    • 1970-01-01
    • 2013-10-23
    • 2013-03-28
    • 1970-01-01
    相关资源
    最近更新 更多