• 技术文章 >后端开发 >Python教程

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

    不言不言2018-05-18 15:28:26原创2700
    这篇文章主要给大家介绍了关于Redis获取某个前缀的key脚本的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Redis具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

    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)

    相关推荐:

    php 使用 redis 的缓存实例

    以上就是Redis获取某个前缀的key脚本实例的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:Redis 脚本 前缀
    上一篇:python list删除元素时要注意的坑点 下一篇:python利用不到一百行代码实现一个小siri
    线上培训班

    相关文章推荐

    • Socket编程实战• 十个Python程序员易犯的错误• 详解Python的迭代器、生成器以及相关的itertools包• 分析在Python中何种情况下需要使用断言• python fabric实现远程操作和部署示例

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网