2012-01-10 192 views
49

可以说我有散列的哈希例如复杂的数据结构Redis

$data = { 
    'harry' : { 
     'age' : 25, 
     'weight' : 75, 
    }, 
    'sally' : { 
     'age' : 25, 
     'weight' : 75, 
    } 
} 
  1. 会是什么
  2. 你可以直接获得一个值(“平常”的方式来存储这种数据结构如让哈利(或者你不想?):年龄
  3. 一旦存储你能不能直接更改子键的值(例如莎莉:体重= 100)
+1

另外我们如何在Redis中对这些数据进行排序?就像我想要名列前茅10名的人一样,他们的体重最重。 – Bharat 2017-04-28 12:39:42

回答

20

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

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

你可以直接获得一个值(例如获得哈利?年龄)

是的,看到HGETHMGETHGETALL

一旦存储你能直接改变一个子密钥的值(例如 萨利:重量= 100)

是的,见HSET

+1

谢谢 - 所以它将不得不被存储在多个操作?例如我无法一次存储数据结构?显然,这只是一个相当平凡的例子,它希望存储更复杂的“对象”,并且可能不了解这是否是正确的选择? – Xrender 2012-01-11 08:55:31

+0

整个redis基于其高级数据结构之间的简单操作。你可以试着看[ohm](http://ohm.keyvalue.org/),它可能会为你抽象一些东西。 – yojimbo87 2012-01-11 09:06:13

+0

您也可以在[Lua](http://redis.io/commands/eval)中编写自己的脚本;应用程序可以发送一个Lua脚本,就像它是一个EVAL查询一样,它将在Redis服务器上执行,让您的Lua脚本在网络上运行多个Redis命令而无需多次往返。 – ekillaby 2013-03-25 02:54:40

15

让我们,我们在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 

请纠正我,如果我错了。

+0

作为Redis的入门者,这些都是我能想到的解决方案。但更进一步的考虑是查询。 假设您需要获取所有拥有“24”作为“朋友”的用户的所有日志。 在案例1中,您必须阅读所有朋友列表并收集用户标识,然后获取所有日志。 (=强制性往返) 在案例2中,我不知道redis是否有能力查询转储的json数据。性能会是什么。 并添加第三种情况可以说“朋友”是一个更加常量的数据类型,如“权利” 这样的结构会使感觉? user:21:friends:23-43-12 - > as列表 – 2014-10-23 10:37:44

+0

对于这种情况,我们可以使用EVAL命令进行内部lua处理 – 2017-11-29 15:14:28