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

abh*_*t k 7 redis

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

 Prod_Color  |   Prod_Count  |   Prod_Price   |   Prod_Info
------------------------------------------------------------
  Red        |       12      |       300      |   In Stock
  Blue       |        8      |       310      |   In Stock
Run Code Online (Sandbox Code Playgroud)

我随后尝试了以下哈希命令

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"
Run Code Online (Sandbox Code Playgroud)

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

Nil*_*oct 6

你可以做什么,除了我的代码,我在其他地方看到的是使用后缀键入哈希值.你可能有一个标识每条记录的后缀,我会在这里使用颜色:

在插入时间:

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
Run Code Online (Sandbox Code Playgroud)

在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
Run Code Online (Sandbox Code Playgroud)

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


Tom*_*son 5

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

Records red = {color:red, price:12, info:"300 in stock"}
Records blue = {color:blue, price:8, info:"310 in stock"}
Run Code Online (Sandbox Code Playgroud)

如果您不想使用 json,则必须使用多个哈希,其中哈希是表中的一行。您还可以通过存储包含每个哈希值的密钥的集合来支持获取所有功能。


Pet*_*own 1

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