Spring Boot 中使用 RedisTemplate 进行 scan 操作

Redis 中使用 keys * 会获取所有匹配的键,但同时也会锁住整个 redis 造成雪崩,更好的方法是使用 scan 命令,有关介绍 看这 不做过多介绍

引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

使用

// 注入 RedisTemplate
private final StringRedisTemplate redisTemplate;

// 定义 scan 方法
private Set<String> scan(String pattern) {
    Set<String> keys = Sets.newHashSet();
    RedisConnection connection =redisTemplate.getConnectionFactory().getConnection();
    ScanOptions scanOptions = ScanOptions.scanOptions()
    .match(pattern)
    .count(100)
    .build();
    Cursor<byte[]> cursor = connection.scan(scanOptions);
    while (cursor.hasNext()) {
        keys.add(new String(cursor.next()));
    }

    return keys;
}