在Redis中存储对象属性

27
假设我有一个对象(User),它由几个属性(ID、Name、Surename、Age)组成。在redis中,哪种方式更好存储这个对象?
  • 将每个属性的值存储在专用键中,例如user:{id}:id、user:{id}:name、user:{id}:surename、user:{id}:age
  • 将整个User对象作为JSON字符串存储在一个键中,例如user:{id}:json(键的值将类似于此:{"ID": 123, "Name": "Johny", "Surename": "Bravo", "Age":22})
3个回答

21

根据这些两个来源,最优解可能是使用哈希表,因为当使用专用键和长字符串与JSON作为键值的情况下,内存消耗较少。


嗯,存储对象数组时似乎有很多选项:(1)将每个属性存储在专用键中(即 SET user:{id}:name "Fred"),(2)将整个对象作为 JSON 字符串存储在单个键中(即 SET user:{id} '{"name":"Fred"}');或者(3)将每个对象作为 JSON 字符串存储在 Redis 哈希中(即 HMSET users {id} '{"name":"Fred"}')。当然,每种方法都有优缺点,但哪种方法最节省 CPU 时间/内存呢? - BMiner
另外,还有一种方法(4),就是将每个对象的属性存储在Redis哈希中(例如 HMSET user:{id} name "Fred")。 - BMiner
1
我很想看到这个答案进行修订,考虑所有四种(或更多)方法以及每种方法的CPU与内存效率。当然,我想这取决于系统计划如何查询这些数据。更不用说...除了内存效率/速度之外,还有其他优缺点。那么“最佳实践”呢? - BMiner

1

来自官方Redis

尽可能使用哈希表

小型哈希表可以用非常小的空间进行编码

当你在其中没有太多字段时。

每次哈希表超过指定的元素数量或元素大小时,它都会被转换为实际的哈希表,内存节省将会丢失。


0

从我的测试来看,使用哈希占用的空间要小得多,但这大概是唯一的原因。如果你有大量的数据需要处理,考虑使用哈希。否则,你可以使用 JSON,因为它易于序列化和反序列化为对象,如果需要的话,也很容易处理。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接