项目作者: GoDannyLai

项目描述 :
fast and save tool to scan redis or redis cluster to find big keys, delete keys, or dump keys. 扫描redis或者redis cluster, 安全而快速地找出大key, 删除key, dump出key的内容
高级语言: Go
项目地址: git://github.com/GoDannyLai/redis_scanner.git
创建时间: 2018-11-04T13:51:49Z
项目社区:https://github.com/GoDannyLai/redis_scanner

开源协议:

下载


简介

  1. redis_scanner可以快速安全地分析出redisredis cluster所有的big key,快速安全地删除匹配某个正则的所有KEY
  2. 安全地dump出匹配某个正则的所有KEY的内容
  3. 支持redis版本4.0及之后的memory usage unlink功能来分析KEY的大小与删除KEY
  4. redis_scanner解决了redis-cli --bigkeys抽样与list等复合类型的KEY不准确的问题, 也解决了现在某些同类型的工具速度慢的问题
  5. 1)生成csv格式的bigkey报表, 指定-st -li XXX会按KEY大小排序并输出最大的XXXKEY
  6. redis_scanner -H 192.168.xx.125 -P 6380 -dc -o tmp -si 1024 -st -li 100 -ts -w bigkey -ps 1

bigkey

  1. 结果文件每列的含义如下:
  2. db: redis database number
  3. sizeInByte: key所占内存的大小, 单位byte
  4. elementCnt: 复合类型key的元素个数
  5. type: key的类型
  6. expire: 过期时间, 空则为没有设置过期时间
  7. bigSize: 复合类型key所有元素中占用内存最大的元素的内存大小, 单位byte
  8. key: key
  9. big: 最大元素名

bigkey

  1. 2dump出指定的KEYvalue
  2. redis_scanner -H 192.168.xx.125 -P 6380 -dc -o tmp -si 1024 -ts -w dump -ps 1

bigkey

  1. 结果为json格式, 加了-b更易读,否则是一行一个key

bigkey

  1. 3) 删除指定的KEY
  2. 安全起见,一般先dry run来输出所有符合条件的KEY 然后再删除

bigkey

  1. 真正删除dry run结果中的所有KEY

bigkey

参数解释

  1. -F
  2. 即使指定主库,默认也是从找到最新的从库来扫描key 如果没有合适的从库来扫描,则报错。
  3. -F则在没有合适的情况下, 使用主库来扫描
  4. -H
  5. redis ip地址
  6. -P
  7. redis 端口
  8. -p
  9. redis 密码
  10. -af
  11. redis地址文件。 一行一个地址, 地址格式为IP:port的形式, 可以指定多行多个地址。
  12. redis_scanner支持两个地址指定方式, 一种是-af 另一种是-H与-P
  13. -kd
  14. 从-kd指定的目录读入要处理的KEY列表。 文件名必须为target_keys_ip_port.txt
  15. 一行一个KEY名。一般是-dr或者-bn输出的结果文件
  16. -n
  17. redis database, 默认为0
  18. -dc
  19. 对于redis cluster, -dc是自动发现集群的所有节点, 并扫描整个集群,否则只是扫描指定地址的节点
  20. -w
  21. 选择功能, 支持的功能为bigkey, dump, delete, 分别为扫描大key dumpkey内容与删除key
  22. -dr
  23. dry run. 只是输出符合条件的key 不作dump, delete或者扫描。 对于delete, 建议都先dry run再真正delete
  24. -ti
  25. 每个节点的处理线程, 默认为2。扫描线程与处理线程不同, 扫描线程固定为每个节点一个线程,
  26. 不可更改. 注意调整该参数, 以免redis qps过大,cpu过高
  27. -ps
  28. pipeline大小, 与-ti是两个对速度与性能影响最大的参数。 支持redisredis cluster,
  29. 不过如果扫描cluster across slots错误时,-ps 只能指定为1
  30. -es
  31. 扫描key名时,每次scan返回多少个KEY 扫描一个复合类型的key时, 每次scan返回多少个元素
  32. -ec
  33. 扫描一个复合类型的key时,每处理-ec个元素就休眠-ei microseconds
  34. -ei
  35. 扫描一个复合类型的key时,每处理-ec个元素就休眠-ei microseconds
  36. -kc
  37. 每处理-kckey, 就休眠-ki microseconds
  38. -ki
  39. 每处理-kckey, 就休眠-ki microseconds
  40. -k
  41. 匹配key名正则表达式, 如果设置了, 只有匹配的key才会进入下一步处理。 注意命令行可能会转义的正则字符
  42. -si
  43. 对于delete/dump 只有占用内存超过-si指定的值的才会进入下一步处理. 单位为byte 默认为3072
  44. -maxt -mint
  45. 只处理过期时间默认条件的KEY, 单位second, 默认为0.
  46. 1)-mint==-1 and -maxt==-1: only keys not set expired time.
  47. 2)-mint==0 and -maxt==0: any key.
  48. 3)-mint > 0: only keys whose ttl >= -mint.
  49. 4)-maxt > 0: only keys whose ttl <= -maxt
  50. -ts
  51. 默认如果自动检测到redis的版本大于等于4.0.0, 则使用memory usage来估算key的内存, 指定-ts
  52. 则不管redis版本, 都是一个key一个key, 一个元素一个元素地读出来计算内存大小。
  53. -sr
  54. 当使用memory usage来抽样检测key内存大小时, -sr指定抽样的百分比,仅作用于复合类型,
  55. 即是抽样多少元素来统计KEY的内存
  56. -dd
  57. 默认是通过给key设置一个1到-ex之间随机的过期时间来删除KEY. 如果指定-dd
  58. 则对于大于等于4.0.0版本的redis , 使用unlink来删除,否则使用delete来删除
  59. -ex
  60. KEY设置-ex秒过期时间
  61. -st
  62. -w=bigkey时, 结果按KEY的大小排序
  63. -li
  64. -w=bigkey时, 结果只输出最大的-likey
  65. -bn
  66. -w=bigkey时, 结果只输出KEY的名字,一行一个key
  67. -b
  68. -w=dump时, 默认一行一个keyjson格式内容, 指定-b则以更易读的形式输出json格式内容
  69. -o
  70. 指定结果输出目录, 默认当前目录

联系

  1. 有任何建议或者bug 请联系laijunshou@gmail.com