Skip to content

DefaultRedisCacheWriter performance issue #2025

Closed
@rickgong

Description

@rickgong

We've been bumped into Redis performance issue recently, due to too many REDIS KEYS commands were requested.
Thousands of KEYS commands were sent to Redis server, while our codes never use KEYS command directly.

My college found that KEYS command came from DefaultRedisCacheWriter.clean method.
byte[][] keys = Optional.ofNullable(connection.keys(pattern)).orElse(Collections.emptySet()) .toArray(new byte[0][]);

My question is: Is there an option to switch it to Redis SCAN method? Or I have to resort to a customized RedisCacheWriter?

A while loop of SCAN usually takes client more time to complete, so it is actually still a less-satisfactory solution. The advantage is SCAN method will not block REDIS server for long.

Cache clearing may be performed in an asynchronous fashion, while the DefaultRedisCacheWriter goes for synchronous way, it therefore blocks both client and Redis Server, with the advantage that subsequent lookups won’t be seeing the cache entries any more.

Version: spring-boot, 2.3.3, spring-data-redis, 2.3.3.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions