Redis Python:scan()函数不返回任何内容,但dbsize返回大于零的值

5q4ezhmt  于 8个月前  发布在  Redis
关注(0)|答案(1)|浏览(82)

我使用Redis-py与Python中的Redis数据库进行通信,使用以下代码。
当我使用功能键(n)获得数据库键列表时。
但是当我使用dbsize()函数获取数据库的大小时,我得到的数字大于零。它只是在某些特定的时间发生,我不知道为什么会发生。你知道为什么吗
下面是我写的代码:

REDIS_SERVER = redis.Redis(
    host=REDIS_HOST,
    port=REDIS_PORT,
    db=REDIS_DB,
    decode_responses=True
)
n=5
keys = REDIS_SERVER.scan(count=n)[1]
db_size = REDIS_SERVER.dbsize()

我的目的是从数据库中获取特定数量的密钥。由于性能问题,我不喜欢使用keys()函数。除了使用scan()函数,还有其他方法吗?

bbmckpt7

bbmckpt71#

SCAN意味着在循环中迭代使用;你从requestinflg cursor zero开始,在结果页面(可能是空的),它会返回给你要使用的 next 光标-你一遍又一遍地返回它,直到它返回给你sentinel zero。
你给予的另一个数字不是“每页给给予我这么多结果”-因为那可能需要长时间等待过滤后的结果。相反,它更像是一个“做这么多工作”的提示-无论你传入什么,in仍然可以返回零结果。假设有一个大型数据库,您使用的是SCAN的过滤版本,唯一的匹配结果是它在数据库中找到的最后一项;为了避免阻塞其他工作,所有的许多许多“这里什么都没有,用这个令牌再试一次”结果仍然需要快速完成,并且在它扫描完所有内容之前不阻塞。

相关问题