package cn.cetc54.platform.core.common.redis; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.connection.RedisConnection; import org.springframework.data.redis.core.Cursor; import org.springframework.data.redis.core.ScanOptions; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Component; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.HashSet; import java.util.Set; import java.util.function.Consumer; /** * @author exrick */ @Component public class RedisTemplateHelper { @Autowired private StringRedisTemplate redisTemplate; /** * scan 实现 * @param pattern 表达式 * @param consumer 对迭代到的key进行操作 */ private void scan(String pattern, Consumer consumer) { redisTemplate.execute((RedisConnection connection) -> { try (Cursor cursor = connection.scan(ScanOptions.scanOptions().count(Long.MAX_VALUE).match(pattern).build())) { cursor.forEachRemaining(consumer); return null; } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(e); } }); } /** * 获取符合条件的key * @param pattern 表达式 * @return */ public Set keys(String pattern) { Set keys = new HashSet<>(); this.scan(pattern, item -> { // 符合条件的key String key = new String(item, StandardCharsets.UTF_8); keys.add(key); }); return keys; } }