将对象保存在缓存中的最佳做法
问题描述:
我使用Redis作为缓存服务(Key => Value)@ AWS ElastiCache。将对象保存在缓存中的最佳做法
我要救它包含高速缓存内嵌套的对象的对象:
- Object1 - 包含对象2的情况下
我显然连载我的目标 - 让我们以JSON表示为事 - 所以我的序列化对象是这样的:
{
"property1":"property1",
"property2":"property2",
"property2":"property3",
"object2":{
object2
}
}
我不知道会是怎样从以下选项中的最佳实践s:
- 在我的键下存储整个object1作为完整的JSON。
- 使用自己的键存储object2,并在我的object1序列化中将object2键作为引用,并在从高速缓存拉回时通过键将object2拉出。
我的胆子认为选项1是最好的做法和最有效的,但我有第二个想法在键上存储大的嵌套对象。
答
您的方案没有通用的最佳解决方案。这取决于你如何查询你的数据。
如果您始终从服务或客户端获取根对象,实际上您将整个JSON存储在字符串键中。另一方面,如果您还需要查询关联对象,则需要将每个整个对象图都存储在字符串键中,但是您还需要将每个关联对象存储在散列parentobject:[id]
中,并且将该对象存储在散列parentobject:[id]
中。整个散列将存储直接关联,其中关键字将是关联的对象标识符以及关联的JSON序列化对象的值。
根据您想要查询根和相关对象的方式,您需要将它们以集,有序集和/或列表或其他散列为索引。
正如我上面所说,没有确定的解决方案,但您需要做一个好的案例研究,并考虑如何谨慎地将数据存储在Redis中,因为错误的数据存储设计可能会变成无穷无尽的痛苦你的项目。
想想Redis就像是一个数据索引。这就好像您将手动实施关系数据库索引一样。
如果你采取“根”的方法,你可以通过存储压缩JSON值或使用更有效的协议,如msgpack –
@ItamarHaber来保存RAM在我的情况下,我是“gzipping”JSON字符串 –