diff --git a/pqs-common/common-redis/src/main/java/com/njcn/redis/utils/RedisUtil.java b/pqs-common/common-redis/src/main/java/com/njcn/redis/utils/RedisUtil.java index 4adf91345..23ec16594 100644 --- a/pqs-common/common-redis/src/main/java/com/njcn/redis/utils/RedisUtil.java +++ b/pqs-common/common-redis/src/main/java/com/njcn/redis/utils/RedisUtil.java @@ -2,9 +2,7 @@ package com.njcn.redis.utils; import lombok.RequiredArgsConstructor; import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; -import org.springframework.data.redis.core.RedisCallback; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.data.redis.core.*; import org.springframework.stereotype.Component; import java.nio.charset.StandardCharsets; @@ -325,8 +323,25 @@ public class RedisUtil { * @return */ public List getLikeListAllValues(String key) { - List info=new ArrayList<>(); - for (String s : redisTemplate.keys(key + "*")) { + List info = new ArrayList<>(); + // 使用 SCAN 替代 keys,解决 Tair 禁用 KEYS 命令的问题 + Set keys = redisTemplate.execute((RedisCallback>) connection -> { + Set keySet = new HashSet<>(); + ScanOptions options = ScanOptions.scanOptions() + .match(key + "*") + .count(1000) + .build(); + + try (Cursor cursor = connection.scan(options)) { + while (cursor.hasNext()) { + keySet.add(new String(cursor.next())); + } + } catch (Exception e) { + throw new RuntimeException("Redis SCAN 模糊查询失败", e); + } + return keySet; + }); + for (String s : keys) { info.add(redisTemplate.opsForValue().get(s)); } return info;