Scan正则表达式
在平时线上 Redis 维护工做中,有时候须要从 Redis 实例成千上万的 key 中找出特定前缀的 key 列表来手动处理数据,多是修改它的值,也多是删除 key。这里就有一个问题,如何从海量的 key 中找出知足特定前缀的 key 列表来?算法
keys * 正则表达式匹配数组
scan
相比 keys
具有有如下特色:服务器
scan 参数提供了三个参数,第一个是 cursor 整数值
,第二个是 key 的正则模式
,第三个是遍历的 limit hint
。第一次遍历时,cursor 值为 0,而后将返回结果中第一个整数值做为下一次遍历的 cursor。一直遍历到返回的 cursor 值为 0 时结束。遍历顺序:高位进位加法spa
127.0.0.1:6379> scan 0 match key99* count 1000
Java 的 HashMap 在扩容时会一次性将旧数组下挂接的元素所有转移到新数组下面。若是 HashMap 中元素特别多,线程就会出现卡顿现象。Redis 为了解决这个问题,它采用渐进式 rehash。线程
它会同时保留旧数组和新数组,而后在定时任务中以及后续对 hash 的指令操做中渐渐地将旧数组中挂接的元素迁移到新数组上。这意味着要操做处于 rehash 中的字典,须要同时访问新旧两个数组结构。若是在旧数组下面找不到元素,还须要去新数组下面去寻找。code
scan 也须要考虑这个问题,对与 rehash 中的字典,它须要同时扫描新旧槽位,而后将结果融合后返回给客户端。字符串