1、背景
Redis中有一个经典的问题,在巨大的数据量的情况下,做类似于查找符合某种规则的Key的信息,这里就有两种方式:
- 一是keys命令,简单粗暴,由于Redis单线程这一特性,keys命令是以阻塞的方式执行的,keys是以遍历的方式实现的复杂度是 O(n),Redis库中的key越多,查找实现代价越大,产生的阻塞时间越长。
- 二是scan命令,以非阻塞的方式实现key值的查找,绝大多数情况下是可以替代keys命令的,可选性更强。
2、示例
2.1、scan命令
scan执行方法,执行结果是Cursor<Entry<HK, HV>>
public static Cursor<Map.Entry<Object, Object>> scan(String key) {
if (!StringUtils.isEmpty(key)) {
return redisTemplate.opsForHash().scan(key, ScanOptions.NONE);
}
return null;
}
Cursor游标每次会返回一个对象Map.Entry<Object,