复杂的数据结构Redis

时间:2012-01-10 20:26:21

标签: redis

假设我有哈希哈希,例如

$data = {
    'harry' : {
         'age' : 25,
         'weight' : 75,
    },
    'sally' : {
        'age' : 25,
        'weight' : 75,
    }
}
  1. 存储此类数据结构的“通常”方式是什么(或者不是吗?)
  2. 你能直接获得一个价值(例如得到哈里:年龄?
  3. 一旦存储,您可以直接更改子密钥的值(例如,sally:weight = 100)

3 个答案:

答案 0 :(得分:28)

  

存储这种数据结构的“通常”方式是什么(或者会   你不是吗?)

例如,harry和sally将分别存储在单独的hashes中,其中字段将代表其属性,如年龄和体重。然后set结构会保存你在redis中存储的所有成员(哈里,莎莉,......)。

  

你能直接获得一个价值(例如得到哈里:年龄?)

是的,请参阅HGETHMGETHGETALL

  

存储后,您可以直接更改子密钥的值(例如   莎莉:体重= 100)

是的,请参阅HSET

答案 1 :(得分:16)

让我们把我们必须存储的复杂数据存储在redis中, 例如这一个:

  $data = { 
            "user:1"  : {
                       name : "sally",
                       password : "123"
                       logs : "25th october" "30th october" "12 sept",
                       friends : "34" , "24", "10"
                   } 
            "user:2"  :{
                       name : ""
                       password : "4567"
                       logs :
                       friends: ""
                   }
          }

我们面临的问题是朋友和朋友。日志是列表。 那么我们在redis中表示这些数据的方法就是使用哈希并列出如下内容:

选项 1.哈希映射,键为用户:1,用户:2

      hmset user:1 name "sally" password "12344"
      hmset user:2 name "pally" password "232342"
      create separate list of logs as 
              logs:1 { here 1 is the user id }
              lpush logs:1 "" "" "" 
              lpush logs:2 "" "" ""
      and similarly for friends.

选项 2:将转储的json数据作为字符串编码的哈希映射

      hmset user:1 name "sally" password "12344" logs "String_dumped_data" friends "string of dumped data"

选项 3:这是#1

的另一种表示形式
      something like user:1:friends -> as a list 
      and            user:2:friends -> as a list 

如果我错了,请纠正我。

答案 2 :(得分:3)

取决于您想要做什么,但如果您的数据结构没有更深层次嵌套并且您需要访问每个字段,我建议使用哈希:http://redis.io/commands#hash

以下是对redis数据类型的一个很好的概述,每个都有pro和contra:http://redis.io/topics/data-types