将数据存储为键和作为哈希对象的属性之间的区别

时间:2013-12-06 15:57:09

标签: redis

现在,我正在按如下方式存储用户对象:

user1 = ( id: 1, name: "bob")
user2 = { id: 2, name: "steve"}

HMSET "user:1", user1
HMSET "user:2", user2

HGETALL "user:1" would return the user1 object
HGETALL "user:2" would return the user2 object

如果我这样做,我想知道是否会有任何重大差异(表现或其他):

user1 = ( id: 1, name: "bob")
user2 = { id: 2, name: "steve"}

HSET "USER", 1, JSON.stringify(user1)
HSET "USER", 2, JSON.stringify(user2)

HGET "USER", 1 would give me the string representation of user1 object
HGET "USER", 2 woudl give me the string representation of user2 object

1 个答案:

答案 0 :(得分:0)

两种方式都没有太大的区别。根据你正在做的事情,它主要归结为一个设计决定,尽管你使用的任何一个都应该在整个项目中保持一致,以避免混淆。

以下是方法2的一些优点:

  • 使用JSON可以帮助维护类型一致性
  • Redis将使用更少的内存,可能会更快一些,因为它不必存储或查找这些额外的密钥
  • 可能更容易思考并使用代码

方法2的主要否定在以下示例中总结。假设您需要更新用户名。以下是您使用每种方法的方法。

 // Method 1:
 HMSET user:1 name newname

 // Method 2:
 result = JSON.parse(HGET user 1)
 result.name = newname
 HSET user 1 JSON.stringify(result)