redis的所有的key的获取
一、获取方式
redis的命令keys(*) 可以获取所有的key。但是此种方式当数据量大的时候,会产生阻塞的情况。
redis的key还可以通过scan命令获取key。scan采用渐进式遍历的方式来解决keys命令可能带来的阻塞问题
与SCAN 命令相关的命令:
与SCAN 命令相关的命令还有 SSCAN 命令、 HSCAN 命令和 ZSCAN 命令,都是用于增量地迭代(incrementally iterate)一集元素(a collection of elements),区别在于:
1、SCAN 命令用于迭代当前数据库中的数据库键,返回的每个元素都是一个数据库键;
2、SSCAN 命令用于迭代集合键中的元素,返回的每个元素都是一个集合成员;
3、HSCAN 命令用于迭代哈希键中的键值对,返回的每个元素都是一个键值对,一个键值对由一个键和一个值组成。
4、ZSCAN 命令用于迭代有序集合中的元素(包括元素成员和元素分值),返回的每个元素都是一个有序集合元素,一个有序集合元素由一个成员(member)和一个分值(score)组成。
二、使用步骤
1.引入库
SCAN 命令对应java的 Jedis 中的操作示例如下:
public static void testScan(Jedis jedis){
// 游标初始值为0
String cursor = ScanParams.SCAN_POINTER_START;
String key = "PLFX-ZZSFP-*";
ScanParams scanParams = new ScanParams();
scanParams.match(key);// 匹配以 PLFX-ZZSFP-* 为前缀的 key
scanParams.count(1000);
while (true){
//使用scan命令获取数据,使用cursor游标记录位置,下次循环使用
ScanResult<String> scanResult = jedis.scan(cursor, scanParams);
cursor = scanResult.getStringCursor();// 返回0 说明遍历完成
List<String> list = scanResult.getResult();
long t1 = System.currentTimeMillis();
for(int m = 0;m < list.size();m++){
String mapentry = list.get(m);
System.out.println(mapentry);
//jedis.del(key, mapentry);
}
long t2 = System.currentTimeMillis</