编写一个查询,将多个值添加到REDIS哈希中的一个键



我浏览了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年股票)!我知道我可以创建一个单独的散列并插入第二行值,但是,我打算在单个散列中插入所有值。

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

AT INSERT TIME:

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

AT QUERY TIME:

/* 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

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

在散列中不能有多个具有相同键的项。但是,如果您想通过键检索所有项或单行,则可以使用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命令覆盖了第一个命令的值。您要么需要使用唯一字段,要么需要使用不同的键。

最新更新