使用python获取Redis数据库中的所有密钥
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用python获取Redis数据库中的所有密钥,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1560字,纯文字阅读大概需要3分钟。
内容图文
![使用python获取Redis数据库中的所有密钥](/upload/InfoBanner/zyjiaocheng/889/96121ce4dab9464183035fff01bf6696.jpg)
有一篇关于Redis命令的帖子来获取所有可用的密钥,但是我想用Python来做.
有什么办法吗?
解决方法:
对于大量的键,scan()优于keys(),因为它为您提供了一个可以使用的迭代器,而不是尝试将所有键加载到内存中.
我的redis中有一条1B记录,我永远无法获得足够的内存来立即返回所有密钥.
扫描键一个接一个
这是一个python片段,使用scan()从商店获取匹配模式的所有键并逐个删除它们:
import redis
r = redis.StrictRedis(host='localhost', port=6379, db=0)
for key in r.scan_iter("user:*"):
# delete the key
r.delete(key)
扫描批次
如果您有一个非常大的要扫描的键列表 – 例如,大于> 100k键 – 批量扫描它们会更有效,如下所示:
import redis
from itertools import izip_longest
r = redis.StrictRedis(host='localhost', port=6379, db=0)
# iterate a list in batches of size n
def batcher(iterable, n):
args = [iter(iterable)] * n
return izip_longest(*args)
# in batches of 500 delete keys matching user:*
for keybatch in batcher(r.scan_iter('user:*'),500):
r.delete(*keybatch)
我对此脚本进行了基准测试,发现使用500的批量大小比逐个扫描密钥快5倍.批量大小为500似乎是我Macbook Pro本地运行的最佳选择,它可能因网络而异.我测试了10,100,500,1000和10000的批量大小.如果您想了解我如何对其进行基准测试,请与我联系.
请注意,无论您使用scan()还是keys()方法,该操作都不是原子操作,并且可能无法完成.
绝对避免在命令行使用XARGS
我不建议我在其他地方重复发现这个例子.它不适用于unicode键,即使是中等数量的键,速度也非常慢:
redis-cli --raw keys "user:*"| xargs redis-cli del
在这个例子中,xargs为每个键创建一个新的redis-cli进程!让人惊讶.
我将这种方法的基准测试速度比第一个python示例快4倍,在第一个python示例中,它逐个删除每个键,比以500个批量删除的速度慢20倍.
内容总结
以上是互联网集市为您收集整理的使用python获取Redis数据库中的所有密钥全部内容,希望文章能够帮你解决使用python获取Redis数据库中的所有密钥所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。