$ redis-cli keys '20131028:*' | awk '{print "get "$1}' | redis-cli | awk '{x+=$1} END { print x }'
另一种方法是使用Lua服务器端脚本:
$ redis-cli eval "local keys = redis.call('keys',KEYS[1]) ; local sum=0 ; for _,k in ipairs(keys) do sum = sum + redis.call('get',k) end ; return sum" 1 '20131028:*'
4条答案
按热度按时间sr4lhrrt1#
Redis不是设计来做这类事情的,你可以使用RDBMS,MongoDB,或者类似ElasticSearch的东西。
不过,如果您需要这样做(从shell启动):
另一种方法是使用Lua服务器端脚本:
在这两种情况下,如果Redis示例中有很多密钥,性能会很差,并且在扫描密钥时,示例将被阻止所有连接。
eanckbw92#
Redis v2.6是在Redis服务器上执行Lua脚本的最强大的功能。
需要注意的是,Redis服务器端的lua脚本会屏蔽所有内容,这在大多数情况下可能会破坏交易。stackoverflow.com/a/30896608/2440
62o28rlo3#
我认为最好使用mget,用一个命令获取所有的键,而不是为每个键发出一个命令。这样你只需要一次调用redis就可以得到所有的结果,然后把它们加起来。当然,只有你事先知道键的话,这才有效...
im9ewurl4#
使用redis lua:
可以使用
script load
保存脚本,然后使用evalsha
对任何哈希键重用脚本。