【发布时间】:2015-09-29 15:12:53
【问题描述】:
我有一个 REST API(内置于 Nancy,在 ASP.NET 上运行)可以返回如下 JSON 对象:
{
id: "1",
name: "Fred",
reviews: [
{
id: "10",
content: "I love Stack Overflow"
}
]
}
注意这个对象不是一个直接的实体,而是一个表示。
通常,我会使用数据库中实体的最后修改/时间戳作为 ETag,然后当它更新时,ETag 也会更新。简单的。
但是在这种情况下,如果用户没有改变,但第一次评论的内容发生了变化怎么办?使用前面提到的 ETag 逻辑,它不会改变。我们这里有一个案例,其中表示包含多个实体,我正在尝试找到一种唯一标识它的方法。
所以我需要以某种方式识别该表示(这是一个简单的 C# POCO,存储在 Redis 缓存中)。
这是我最初的想法:
-
Object.GetHashCode()。不起作用,因为内存引用总是不同的。 - 内存流对象,SHA1 散列它。每次都做起来成本很高。
- 在我添加/更新缓存之前,创建一个用于 ETag 的 GUID 并将其也存储在缓存中。然后,当缓存 get 被刷新时(在前面的示例中就是这样),会生成一个新的 GUID 并更新 ETag。这种方法的问题是我将我的 ETag 机制绑定到我的缓存实现(所以不是松散耦合)。
谁能想到一种廉价/有效的方法来做到这一点,最好是在全球范围内? (例如 Object 或基础对象,而不是每个实体/资源的特定 ETag 生成逻辑)。
非常感谢!
【问题讨论】: