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<byte[]> consumer) {
|
|
redisTemplate.execute((RedisConnection connection) -> {
|
try (Cursor<byte[]> 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<String> keys(String pattern) {
|
Set<String> keys = new HashSet<>();
|
this.scan(pattern, item -> {
|
// 符合条件的key
|
String key = new String(item, StandardCharsets.UTF_8);
|
keys.add(key);
|
});
|
return keys;
|
}
|
}
|