19

我们使用 Redis 将各种应用程序配置存储在 DB 0 中。

是否可以为数据库中的每个键/值对查询 Redis,而不必执行两个单独的查询并自己加入键/值对?

我希望功能类似于以下内容:

kv = redis_conn.getall()
# --OR-- #
kv = redis_conn.mget('*')

... 哪里kv会返回一个元组的元组、列表的列表或字典:

然而,在搜索 StackOverflow、Google 和 Redis 文档之后,我可以得出的唯一解决方案(我还没有找到其他人问这个问题..)类似于以下内容:

import redis
red = redis.Redis(host='localhost', db=0)
keys = red.keys()
vals = red.mget(keys)
kv = zip(keys, vals)

我是不是疯了,假设有一个更优雅的方法来解决这个问题?

附加信息

此数据库中的每个值都是一个字符串。

我的问题根本不是如何检索每种唯一数据类型或相关数据类型的值。

相反,我的问题是:有没有办法"hey Redis, return to me every string value in the database"不用询问键,然后根据返回的键查询值?

4

1 回答 1

38

Redis 中不同类型之间存在差异,因此必须查看数据类型来确定如何从键中获取值。所以:

keys = redis.keys('*')
for key in keys:
    type = redis.type(key)
    if type == "string":
        val = redis.get(key)
    if type == "hash":
        vals = redis.hgetall(key)
    if type == "zset":
        vals = redis.zrange(key, 0, -1)
    if type == "list":
        vals = redis.lrange(key, 0, -1)
    if type == "set":
        vals = redis. smembers(key)
于 2013-10-11T07:30:49.580 回答