• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Redis获取某个前缀的key脚本实例

    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 Cluster 字段模糊匹配及删除
    • 详解如何清理redis集群的所有数据
    • Redis批量删除KEY的方法
    • redis集群实现清理前缀相同的key
    上一篇:Redis获取某个大key值的脚本实例
    下一篇:Redis如何存储对象与集合示例详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Redis获取某个前缀的key脚本实例 Redis,获取,某个,前缀,的,