Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在REDIS哈希中编写一个向一个键添加多个值的查询?_Redis - Fatal编程技术网

在REDIS哈希中编写一个向一个键添加多个值的查询?

在REDIS哈希中编写一个向一个键添加多个值的查询?,redis,Redis,我浏览了REDIS散列的命令列表。在REDIS中是否可以为一个散列键分配多个值?例如,我试图以散列的形式表示下表 Prod_Color | Prod_Count | Prod_Price | Prod_Info ------------------------------------------------------------ Red | 12 | 300 | In Stock Blue

我浏览了REDIS散列的命令列表。在REDIS中是否可以为一个散列键分配多个值?例如,我试图以散列的形式表示下表

 Prod_Color  |   Prod_Count  |   Prod_Price   |   Prod_Info
------------------------------------------------------------
  Red        |       12      |       300      |   In Stock
  Blue       |        8      |       310      |   In Stock
我随后尝试了以下散列命令

HMSET Records Prod_Color "Red" Prod_Count 12 Prod_Price 300 Prod_Info "In Stock"

HMSET Records Prod_Color "Blue" Prod_Count 8 Prod_Price 310 Prod_Info "In Stock"

但是,当我尝试使用命令HGETALL Records检索散列时,我只看到第二行插入值(即蓝色,8310,库存)!我知道我可以创建一个单独的散列并插入第二行值,但是,我打算在一个散列中插入所有值。

我认为您误解了散列的工作原理。不能有两个值不同的相同字段。第二个HMSET命令正在覆盖第一个命令中的值。您需要使用唯一字段或不同的键。

哈希中不能有多个具有相同键的项。但是,如果要检索所有项目或按键检索单行,则可以使用JSON:

Records red = {color:red, price:12, info:"300 in stock"}
Records blue = {color:blue, price:8, info:"310 in stock"}

如果不想使用json,则必须使用多个哈希,哈希是表中的一行。您还可以通过存储一个包含每个散列的键的集合来支持get all函数。

您可以做的,我在代码之外的其他地方看到,就是使用后缀为散列设置键。您可能有一个后缀来标识每个记录,我将在这里使用颜色:

插入时间:

HMSET Records:red Prod_Color "Red" Prod_Count 12 Prod_Price 300 Prod_Info "In Stock"
HMSET Records:blue Prod_Color "Blue" Prod_Count 8 Prod_Price 310 Prod_Info "In Stock"

/* For each HMSET above, you issue SADD */
SADD Records:Ids red
SADD Records:Ids blue
查询时:

/* If you want to get all products, you first get all members */
SMEMBERS Records:Ids

/* ... and then for each member, suppose its suffix is ID_OF_MEMBER */
HGETALL Records:ID_OF_MEMBER

/* ... and then for red and blue (example) */
HGETALL Records:red
HGETALL Records:blue

您可能希望使用
主键
作为后缀,因为这应该可以从关系数据库记录中获得。此外,在删除散列键(例如,
DEL记录:red
)时,必须维护成员集(例如,
SREM记录:Ids red
)。还请记住,Redis作为一个改进的缓存非常好,您必须将其设置好以保持值(并保持其性能)。

感谢您的回复!因此,为了创建散列数组,我需要使用集合。@abhijit可以这样。另外,在
rediscli
中尝试是掌握redis的好方法。