赞
踩
想要从redis key列表中找到某个key,redis提供了一个简单粗暴的指令keys用来列出满足查询条件的所有key。
keys redis*
keys redis*key
key指令非常简单,只要提供一个简单的正则表达式即可,但是有两个明显的缺点:
redis为了解决这个问题,在2.8版本中加入了scan指令,对比key具有不少特点:
scan 0 match you* count 1000
scan指令有三个参数,第一个参数是游标cursor值(从0开始);第二个参数是需要匹配的正则表达式;第三个参数是遍历的limit限制。
scan的遍历顺序不是从一位数组的第0位一直遍历到最后一位,而是采用高位进位加法来遍历。
高位进位加法就是,从左边加,进位往右边移动,例如:
0000 —+1—> 1000 —+1—> 0100 —+1—> 1100
二进制逢一进一:
第一次对最高位+1,最高位变为1;
第二次对最高位+1,发现最高位已满需要向右进一,从而最高位变为0,次高位为1;
第三次对最高位+1,最高位变为1,且不改变次高位;
redis之所以这样设计,是为了防止字典扩容和缩容重复遍历和遗漏。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。