diff --git a/src/main/java/org/springframework/data/redis/cache/DefaultRedisCacheWriter.java b/src/main/java/org/springframework/data/redis/cache/DefaultRedisCacheWriter.java index 698f147788..3a9f4bd64b 100644 --- a/src/main/java/org/springframework/data/redis/cache/DefaultRedisCacheWriter.java +++ b/src/main/java/org/springframework/data/redis/cache/DefaultRedisCacheWriter.java @@ -17,18 +17,20 @@ import java.nio.charset.StandardCharsets; import java.time.Duration; -import java.util.Collections; -import java.util.Optional; +import java.util.ArrayList; +import java.util.List; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; import java.util.function.Function; +import com.sun.istack.internal.Nullable; import org.springframework.dao.PessimisticLockingFailureException; import org.springframework.data.redis.connection.RedisConnection; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.connection.RedisStringCommands.SetOption; +import org.springframework.data.redis.core.Cursor; +import org.springframework.data.redis.core.ScanOptions; import org.springframework.data.redis.core.types.Expiration; -import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** @@ -45,6 +47,7 @@ * * @author Christoph Strobl * @author Mark Paluch + * @author zhaolong * @since 2.0 */ class DefaultRedisCacheWriter implements RedisCacheWriter { @@ -179,11 +182,9 @@ public void clean(String name, byte[] pattern) { wasLocked = true; } - byte[][] keys = Optional.ofNullable(connection.keys(pattern)).orElse(Collections.emptySet()) - .toArray(new byte[0][]); - - if (keys.length > 0) { - connection.del(keys); + Cursor cursor = connection.scan(new ScanOptions.ScanOptionsBuilder().match(new String(pattern)).build()); + while (cursor.hasNext()) { + connection.del(cursor.next()); } } finally {