资讯专栏INFORMATION COLUMN

Redis-脚本-获取某个大key的值

silencezwm / 1168人阅读

摘要:背景在中,对于一个很大的,例如类型,直接查看其值会非常慢,于是想到写个脚本通过增量迭代来获取具体的脚本如下功能扫描某个里面的所有元素使用方法脚本实现如下功能扫描某个里面的所有元素使用方法如需获取全部的元素指定扫描匹配值每次匹配数量

1、背景

在redis中,对于一个很大的key,例如hash类型,直接查看其值会非常慢,于是想到写个脚本通过增量迭代来获取

2、具体的脚本如下:

功能:扫描redis某个key里面的所有元素
使用方法:python bigkey_save_values.py "zyyset" "*" 100

3、python脚本实现如下:

</>复制代码

  1. #!/usr/bin/env python
  2. # -*- coding: UTF-8 -*-
  3. #功能:扫描某个key里面的所有元素
  4. #使用方法:python bigkey_save_values.py "zyyset" "m*" 100
  5. #如需获取全部的元素:python bigkey_save_values.py "zyyset" "*" 100
  6. __author__ = "lcl"
  7. import sys
  8. import redis
  9. import os
  10. pool=redis.ConnectionPool(host="192.168.225.128",port=6379,db=0)
  11. r = redis.StrictRedis(connection_pool=pool)
  12. #指定key
  13. key = sys.argv[1]
  14. #扫描匹配值
  15. match = sys.argv[2]
  16. #每次匹配数量
  17. count = sys.argv[3]
  18. #总数量
  19. total = 0
  20. #获取当前路径
  21. path = os.getcwd()
  22. keytype = r.type(key)
  23. print "key的类型为%s" % (keytype)
  24. #扫描到的key输出的文件
  25. txt = path+"/%s.txt" % (key)
  26. #打开文件
  27. #f = open(txt,"w")
  28. def list_iter(name):
  29. list_count = r.llen(key)
  30. for index in range(list_count):
  31. yield r.lindex(key, index)
  32. if keytype=="list":
  33. f = open(txt,"w")
  34. for item in list_iter(key):
  35. #将匹配到对应key中的member/score输出到文件中
  36. f.write("%s %s" % (item,"
  37. "))
  38. total = total+1
  39. f.close
  40. elif keytype=="hash":
  41. f = open(txt,"w")
  42. for item in r.hscan_iter(key,match = match,count = count):
  43. #将匹配到对应key中的member/score输出到文件中
  44. f.write("%s %s" % (item,"
  45. "))
  46. total = total+1
  47. f.close
  48. elif keytype=="set":
  49. f = open(txt,"w")
  50. for item in r.sscan_iter(key,match = match,count = count):
  51. f.write("%s %s" % (item,"
  52. "))
  53. total = total+1
  54. f.close
  55. elif keytype=="zset":
  56. f = open(txt,"w")
  57. for item in r.zscan_iter(key,match = match,count = count):
  58. f.write("%s %s" % (item,"
  59. "))
  60. total = total+1
  61. f.close
  62. else:
  63. print("key的类型为string,value为:" + r.get(key))
  64. print "key:%s的match:%s的数量为:%d" % (key,match,total)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41549.html

相关文章

  • PHP 使用 Redis 实现分布式锁

    摘要:由于执行的原子性所以不要在中执行过长开销的程序,否则会验证影响其它请求的执行。同一个脚本生成的签名都是相同的,所以签名可以先在本地生成,然后在服务器上一次脚本,程序中只需保存和使用该签名即可。同样的脚本,是始终生成相同的签名的。 Last-Modified: 2019年6月5日15:59:34 参考链接 PHP使用Redis+Lua脚本操作的注意事项 《Redis官方文档》用Redi...

    Coly 评论0 收藏0
  • Redis学习

    摘要:单线程执行命令。文件描述符事件。内部原因不合理使用或数据结构可能由此导致慢查询等饱和是单线程,只会使用单个持久化阻塞操作产生阻塞,对硬盘的操作产生阻塞或写操作阻塞等。内存达到时执行内存溢出控制策略。 最近在看《Redis开发与运维》,把自己学会的知识点记录下来,毕竟好记性不如烂笔头。 一.Redis是什么。 Redis是一个Key-Value的NoSQL数据库. 二.Redis的特点。...

    miguel.jiang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<