-
Notifications
You must be signed in to change notification settings - Fork 100
Closed
Description
X-posting from redis/redis-py#3025.
Version: Redis 7.0.13, redis-py 5.0.1, hiredis 2.2.3
Platform: Python 3.11.6 on Debian sid
Description:
When using hiredis with RESP3, hgetall
leaks memory. And it leaks hard - it seems all requested data will persistently live in the memory.
It's easy to reproduce:
from redis import Redis
r = Redis(protocol=3)
for _ in range(1000000):
r.hgetall("any_hash_key")
hget
and hvals
are fine, and when using RESP2 it works as intended as well.
Stack from memray (most recent call last):
return await conn.retry.call_with_retry(
return await do()
return await self.parse_response(conn, command_name, **options)
response = await connection.read_response()
response = await self._parser.read_response(
response = self._reader.gets()
All leaks happen on the last call. (Captured with program in production which uses async Redis, not from the example above)
Metadata
Metadata
Assignees
Labels
No labels