有一篇关于Redis命令以获取所有可用键的文章,但我想使用Python做到这一点。
有什么办法吗?
采用 scan_iter()
scan_iter()
优于keys()
大量密钥,因为它为您提供了可以使用的迭代器,而不是尝试将所有密钥加载到内存中。
我的redis中有一个1B记录,而且我永远都无法获得足够的内存来一次返回所有密钥。
一对一扫描键
这是一个python代码段,scan_iter()
用于从商店中获取与某个模式匹配的所有键,并一一删除它们:
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倍。我测试了不同的批次大小(3,50,500,1000,5000),发现500的批次大小似乎是最佳的。
请注意,无论您使用scan_iter()
or keys()
方法,该操作都不是原子操作,并且可能会部分失败。
绝对避免在命令行上使用XARGS
我不建议在其他地方重复此示例。对于unicode键,它将失败,并且即使中等数量的键,其速度也非常慢:
redis-cli --raw keys "user:*"| xargs redis-cli del
在此示例中,xargs为每个密钥创建一个新的redis-cli进程!那很糟。
我将这种方法的基准测试结果比第一个python示例慢了4倍,在第一个python示例中,它删除了每个键一次,比批量删除500个要慢20倍。
我运行了一段python代码,得到了如下数据帧输出: 现在我没有第7行到第29行。如何获取所有行?
我正在尝试获取数据库(Oracle 11g)中的所有表名,以便为UI中的每个表动态生成复选框。我没有映射.cfg.xml文件中的任何这些表。 我使用了下面的代码: 但它的错误如下:组织。冬眠hql。内部的ast。QuerySyntaxException:未映射user\u表[从user\u表中选择table\u名称] 请告诉我是否有任何方法可以在Hibernate 4中获取所有表名
问题内容: 我运行了此命令以访问我的Redis服务器。 现在,我想显示所有数据库。 请告诉我这个命令。 谢谢。 问题答案: 没有命令可以执行此操作(例如您可以使用MySQL进行操作)。Redis数据库的数量是固定的,并在配置文件中设置。默认情况下,您有16个数据库。每个数据库都用数字(而不是名称)标识。 您可以使用以下命令来了解数据库的数量: 您可以使用以下命令列出定义了某些键的数据库: 请注意,
本文向大家介绍使用Java如何获取所有MongoDB数据库的列表?,包括了使用Java如何获取所有MongoDB数据库的列表?的使用技巧和注意事项,需要的朋友参考一下 在MongoDB中,您可以使用show dbs命令查看数据库列表。 在Java中,您可以使用getDatabaseNames()方法获取MongoDb中所有数据库的列表。 示例 输出结果
问题内容: 有没有一种方法可以获取MySQL数据库中所有表的行数而不在每个表上运行? 问题答案: 不过请从文档中注意:对于InnoDB表, 行数只是 SQL优化中使用 的粗略估计 。您需要使用COUNT(*)进行精确计数(这更昂贵)。
我们使用Redis将各种应用程序配置存储在DB0中。 有没有可能在Redis中查询数据库中的每个键/值对,而不必执行两个单独的查询并自己加入键/值对? 我希望功能类似于以下内容: ...其中将返回元组的元组、列表的列表或字典: 然而,在浏览了StackOverflow,Google和Redis文档之后,我能得到的唯一解决方案(我还没有找到其他人问这个问题..)类似于以下内容: 我的问题根本不是如何