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