如何一次获取Redis数据库中的键值列表?

How to get list of key values in the Redis database at once?

Redis 缓存数据库的新功能。我有一个场景,我有一个项目列表(比如大约 5000 个),将其转换为 JSON 格式需要大约 400 MB。因此,每次修改任何一项时,我都必须从 Redis 数据库中获取值,并且必须更改该特定项目,然后再次将其推送到 Redi 数据库。这有点影响性能。

所以不要将所有项目缓存在一个文件中。我决定将这些项目单独缓存在 Redis 数据库中。但是如果我需要一次获取所有项目,我必须循环并将 5000 个键传递给 Redis 并获取将在 Redis 中进行 5000 次调用的数据。是否有任何选项可以在必要时立即获取所有项目,以便我可以在必要时获取所有数据以及个人数据?另外,Redis 中可以存储多少个密钥有限制吗?

提前致谢

通过在redis中使用Hash你可以实现这个。 Becoz 通过使用 HSET you can update the individual value, also by using HGETALL 您可以在一次调用中获取所有 5000 条数据

这里有很多选择。最好的方法很可能是使用 一个散列来存储所有项目,每个散列字段一个项目 。项目本身很可能有自己的值,您可以在 json 中序列化每个项目。您可以创建:

> hmset items 01 "{'name': 'myCoolItem', 'price': 0.99}" 02 "{'name': 'anotherItem', 'price': 2.99}" ...

您可以获得所有物品:

> hgetall items
  1) "01"
  2) "{'name': 'myCoolItem', 'price': 0.99}"
  3) "02"
  4) "{'name': 'anotherItem', 'price': 2.99}" 
  ...

您可以获得一件物品:

> hget items 02
  "{'name': 'anotherItem', 'price': 2.99}"

这是更新和获取项目之间的权衡,假设对单个项目的更新操作不那么频繁或者项目没有大量字段。要更新给定项目的给定字段,您仍然必须在本地反序列化、修改、序列化然后更新回 Redis,但您是在每个项目的基础上进行的。

如果你的每一项有很多字段或者更新操作相当频繁,你可以每一项使用一个散列键:

> hset item:01 name myCoolItem price 0.99
> hset item:02 name anotherItem price 2.99

这允许您一次获取或修改一项的一个字段:

> hset item:02 price 3.49
> hget item:01 price
  "0.99"

然后您可以使用多个 hgetall 命令获取所有项目。为避免每个项目访问一次服务器,您可以使用流水线。参见 Is there MGET analog for Redis hashes?

第三种选择,可以考虑使用RedisJson.

这样的模块