1.背景
在平时的维护中,经常会遇到要统计某个前缀的key有多少,在请求比较多的redis中,keys * 会直接导致阻塞。
可以采用scan的方式进行增量迭代,查询使用pipeline减少交互,提高效率。
2.scan命令的优缺点
SCAN命令的有SCAN,SSCAN,HSCAN,ZSCAN。
SCAN的话就是遍历所有的keys
其他的SCAN命令的话是SCAN选中的集合。
SCAN命令是增量的循环,每次调用只会返回一小部分的元素。所以不会有KEYS命令的坑。
SCAN命令返回的是一个游标,从0开始遍历,到0结束遍历。
scan 0 1) "655" 2) 1) "test1" 2) "test2"
返回值一个array,一个是下次循环的cursorId,一个是元素数组。SCAN命令不能保证每次返回的值都是有序的,另外同一个key有可能返回多次,不做区分,需要应用程序去处理。
另外SCAN命令可以指定COUNT,默认是10。但是这个并不是指定多少,就能返回多少,这只是一个提示,并不能保证一定返回这么多条。
优点:
缺点:
3. python脚本的实现
python中有一个封装的函数scan_iter--查看所有元素--迭代器
脚本内容:
#!/usr/bin/env python # -*- coding: UTF-8 -*- #作用:统计某个前缀key的个数,并将其输入到文件 #使用方法:python scan_redis.py apus* 100 __author__ = "lcl" import sys import redis import os pool=redis.ConnectionPool(host='192.168.225.128',port=6379,db=0) r = redis.StrictRedis(connection_pool=pool) #扫描匹配值,通过sys.argv传参 match = sys.argv[1] #每次匹配数量 count = sys.argv[2] #print match #print count #总数量 total = 0 #扫描到的key输出到文件 path = os.getcwd() #扫描到的key输出的文件 txt = path+"/keys.txt" f = open(txt,"w") for key in r.scan_iter(match = match,count = count): # f.write("%s %s" % (key,"\n")) f.write(key+"\n") total = total+1 f.close print "匹配: %s 的数量为:%d " % (match,total)
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对小牛知识库的支持。
本文向大家介绍Redis获取某个大key值的脚本实例,包括了Redis获取某个大key值的脚本实例的使用技巧和注意事项,需要的朋友参考一下 1、前言 工作中,经常有些Redis实例使用不恰当,或者对业务预估不准确,或者key没有及时进行处理等等原因,导致某些KEY相当大。 那么大Key会带来哪些问题呢? 如果是集群模式下,无法做到负载均衡,导致请求倾斜到某个实例上,而这个实例的QPS会比较大,内存
问题内容: 我将数据存储在Redis中。我将它存储在GUID,createday和它的大小中。 因此,我定义以下内容: 我希望查看我的数据库中的所有文件。因此,我尝试以下操作: 但是res是。我该怎么做? 问题答案: 返回存储在key处的哈希的所有字段和值,您不能指定掩码: http //redis.io/commands/hgetall 您可以调用获取符合条件的所有键的列表,然后循环获取所有值。
本文向大家介绍Linux获取当前脚本真实路径的方法,包括了Linux获取当前脚本真实路径的方法的使用技巧和注意事项,需要的朋友参考一下 1.获取当前脚本的真实路径: 2.readlink -f :获取符号链接的真实文件位置,最后得到符号链接的真实文件位置 3.basename :获取文件的文件名 4.dirname:获取文件的目录名 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或
问题内容: 如果我有PHP脚本,如何从该脚本内部获取文件名? 另外,给定表单脚本的名称,我如何仅提取“ jquery.js”部分? 问题答案: 只需使用PHP魔术常数 即可获取当前文件名。 但是似乎您想要没有的部分。所以… 一个更通用的文件扩展名去除器如下所示… 如您所料,使用标准的字符串库函数要快得多。
本文向大家介绍获取JsonObject某一未知key的值操作,包括了获取JsonObject某一未知key的值操作的使用技巧和注意事项,需要的朋友参考一下 我就废话不多说了,大家还是直接看代码吧~ 补充:java 解析json 遍历未知key 看代码吧~ 以上为个人经验,希望能给大家一个参考,也希望大家多多支持呐喊教程。如有错误或未考虑完全的地方,望不吝赐教。
主要内容:Redis 脚本,1.Eval 命令,2.EvalSha 命令,3.Script Exists 命令,4.Script Flush 命令,5.Script kill 命令,6.Script Load 命令Redis 脚本 Redis 脚本使用 Lua 解释器来执行脚本。 Redis 2.6 版本通过内嵌支持 Lua 环境。执行脚本的常用命令为 EVAL。 1.Eval 命令 Redis Eval 命令使用 Lua 解释器执行脚本。 1.1语法 Eval 命令的基本语法如下: cript