美文网首页
redis-scan命令

redis-scan命令

作者: zhangsanzhu | 来源:发表于2018-12-29 09:33 被阅读0次

redis-scan命令

介绍&场景

redis中找到以某某开头的key对这些key进行操作。

问题

使用keys的问题是,会拿出所有的对应的keys。
这样不仅仅你会发现满屏幕的key停不下来,因为redis是单线程的这个操作会影响其他的命令,其他命令很可能就超时了。

keys 使用方法

127.0.0.1:6379> SET n1 aa
OK
127.0.0.1:6379> SET n2 aa
OK
127.0.0.1:6379> SET n3 aa
OK
127.0.0.1:6379> SET n4 aa
OK
127.0.0.1:6379> keys n*
 1) "name"
 2) "n"
 3) "name2"
 4) "nk"
 5) "n2"
 6) "n3"
 7) "n4"
 8) "ning"
 9) "name1"
10) "nn"
11) "n1"
127.0.0.1:6379>

scan 大海捞针 (>=redis 2.8)

scan cursor [MATCH pattern] [COUNT count]
match: 表示正则
count:指定扫描的槽数量
cursor:槽的游标(index),初始为0,结束也是0

案例

127.0.0.1:6379> scan 0 match a* count 2
1) "81920"
2) 1) "aaaaa54588"
   2) "aaaaa15117"
127.0.0.1:6379> scan 0 match a* count 3
1) "114688"
2) 1) "aaaaa54588"
   2) "aaaaa15117"
   3) "aaaaa79701"
   4) "aaaaa6832"
   5) "aaaaa1417"
   6) "aaaaa57847"
127.0.0.1:6379>

可以发现返回结果跟limit没有直接关系
limit是限制服务器扫描字典的槽数量(约等于)

槽是啥

槽就是字典的hash结构中的第一层数组结构中的index。

为什么返回的数量不确定

因为扫描槽(index)的时候,有的槽是空的,或者有的槽下面挂着很多元素,那就出现少于limit和多于limit这种情况。

scan扫描的顺序

高位进位加法来遍历,保证各种情况都能遍历到(详情自己百度吧 我是没看懂,也不想看。)

如果定位大key

  1. 写个脚本 scan+size两个操作进行判断
  2. redis-cli -h 127.0.0.1 -p 7001 –-bigkeys -i 0.1 redis-cli支持扫描

相关文章

网友评论

      本文标题:redis-scan命令

      本文链接:https://www.haomeiwen.com/subject/ecqulqtx.html