redis之scan

x33g5p2x  于11个月前 转载在 Redis  
字(0.7k)|赞(0)|评价(0)|浏览(120)

redis之scan

  • 1.概念
  • 2.基本用法

1.概念

scan是redis2.8以后引入的,它可以说是keys的一个升级版,我们知道keys命令可以用来查询key,可以使用通配符,但是没有分页功能,而且redis是单线程,所以key的查询比较消耗时间,特别是数据量大的时候,scan具备keys的功能,而且还可以分页,不会阻塞线程,还可以控制每次返回的结果数

2.基本用法

  1. 事先准备1万条数据
package com.yl;

import redis.clients.jedis.Jedis;

public class ScanTest {
    public static void main(String[] args) {
        Jedis jedis = JedisUtils.getJedisObject();
        for (int i = 0; i < 10000; i++) {
            jedis.set("k"+i,"v"+i);
        }
    }
}
  1. scan命令提供了三个参数,第一个cursor(一维数组的索引),第二个参数key(匹配模式),第三个limit(遍历一维数组的个数),这里要注意一点了,limit参数并不是代表着就返回limit条数据,redis其底层存储key的原理和jdk1.8中的hashmap原理很类似,类似加多了一个红黑树,用数组和链表来存储数据,所以limit这个值统计出来的数据个数和预想的不一致也是可以理解的!

游标的作用: 作为开始遍历一维数组的位置,如果游标为0则代表着遍历key完毕!!!

scan 0 match k3* count 1000

3.scan是一系列的指令,除了遍历所有的key外,也可以遍历某一个类型的key
zsacn -> zset
sscan -> set
hscan -> hash

相关文章

热门文章

更多