Redis在Redis散列中存储值列表

Redis在Redis散列中存储值列表,redis,Redis,我的任务是获取特定用户id的动物列表(例如) 我不想为每个用户使用set/list 我曾尝试使用散列,其中每个字段都是用户id,每个值都是串联的动物字符串。例如:{“1234”:“狗猫”,“8477”:“鸟狗”}。在这里,我可以为用户“1234”获取动物,只需调用一次Redis 我知道有一个命令,它将项目附加到字符串中。但这不适用于附加到散列中的值 我还尝试使用set,并通过前缀获取值。对于上面的示例,我的集合将包含:(“1234:dog”、“1234:cat”、“8477:bird”、“847

我的任务是获取特定用户id的动物列表(例如)

我不想为每个用户使用set/list

我曾尝试使用散列,其中每个字段都是用户id,每个值都是串联的动物字符串。例如:
{“1234”:“狗猫”,“8477”:“鸟狗”}
。在这里,我可以为用户“1234”获取动物,只需调用一次Redis

我知道有一个命令,它将项目附加到字符串中。但这不适用于附加到散列中的值

我还尝试使用set,并通过前缀获取值。对于上面的示例,我的集合将包含:
(“1234:dog”、“1234:cat”、“8477:bird”、“8477:dog”)
。为了获得用户“1234”的所有动物,我需要搜索前缀“1234:”。但当我有太多物品时,这不是比例

我能做些什么来完成我的任务

Redis的数据结构不能嵌套在其他数据结构中,因此不可能在散列中存储列表

在redis中,您可以自由创建任意数量的键。因此,您可以做的是使键附加
用户id
。维护该键的哈希集/列表。例如:

user_id:1234 =["dog", "cat"];
user_id:8477 =["bird", "dog"];
有关详细信息,请查看以下链接:


  • 如果您不想为每个用户保留单独的集合/列表,而是希望以最佳方式获取每个用户的数据,那么Redis SortedSet数据结构和词典搜索似乎是您的解决方案

    将数据保存在分类数据集中(名为
    动物
    ):

    从该分类数据集中获取用户
    1234
    的数据:

    ZRANGEBYLEX animals [1234: (1234;
    
    输出:

    1) "1234:cat"
    2) "1234:dog"
    

    事实上,@ruhul的答案是一个很好的解决方案。但是,如果您坚持用一个键保存所有用户的信息,您可以尝试以下解决方案

    按照您的尝试,将信息保存在
    散列中。当您需要将新动物附加到给定用户时。您可以使用
    HGET
    命令获取他已经拥有的动物。然后将新动物添加到字符串中,并使用
    HSET
    命令更新其动物信息


    为了使其原子化,您可以将此逻辑包装成一个。

    正如我所说的,我希望避免为每个user@sazzad我找不到一个排序集可以容纳的最大键数。你知道吗?@EyalCh你知道集合/列表/散列也一样吗?
    1) "1234:cat"
    2) "1234:dog"