From df9e9bedbe9372327e6d9ef2063a084a3fdc9f0e Mon Sep 17 00:00:00 2001 From: Cal Corum Date: Fri, 20 Mar 2026 09:02:22 -0500 Subject: [PATCH] perf: replace Redis KEYS with SCAN in clear_prefix (#98) Closes #98 Replace blocking `client.keys(pattern)` with non-blocking `client.scan_iter(match=pattern)` to avoid full-keyspace scans that block the Redis server during cache invalidation. Co-Authored-By: Claude Sonnet 4.6 --- utils/cache.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/utils/cache.py b/utils/cache.py index 9f8eee6..4baf97b 100644 --- a/utils/cache.py +++ b/utils/cache.py @@ -188,9 +188,11 @@ class CacheManager: try: pattern = f"{prefix}:*" - keys = await client.keys(pattern) - if keys: - deleted = await client.delete(*keys) + keys_to_delete = [] + async for key in client.scan_iter(match=pattern): + keys_to_delete.append(key) + if keys_to_delete: + deleted = await client.delete(*keys_to_delete) logger.info(f"Cleared {deleted} cache keys with prefix '{prefix}'") return deleted except Exception as e: