若使用 RedisTemplate 的 keys(String prefix); 方法查询时Redis版本不支持时可以使用如下代码查询:
import java.io.IOException;import java.nio.charset.StandardCharsets;import java.util.ArrayList;import java.util.List;import java.util.function.Consumer;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;@Componentpublic class RedisHelper { @Autowired private StringRedisTemplate stringRedisTemplate; /** * scan 实现 * @param pattern 表达式 * @param consumer 对迭代到的key进行操作 */ private void scan(String pattern, Consumer<byte[]> consumer) { this.stringRedisTemplate.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 prefix 表达式 * @return */ public List<String> keys(String prefix) { List<String> keys = new ArrayList<>(); this.scan(prefix, item -> { //符合条件的key String key = new String(item, StandardCharsets.UTF_8); keys.add(key); }); return keys; }}