#35651: django redis cache not really using connection pooling ---------------------------+----------------------------------------------- Reporter: gojuukaze | Type: Bug Status: new | Component: Core (Cache system) Version: 5.0 | Severity: Normal Keywords: | Triage Stage: Unreviewed Has patch: 0 | Needs documentation: 0 Needs tests: 0 | Patch needs improvement: 0 Easy pickings: 0 | UI/UX: 0 ---------------------------+----------------------------------------------- I'm using `django.core.cache.backends.redis.RedisCache` as a backend for redis, and I recently observed that the number of Redis connections has been continuously increasing.
After debugging, I found that whenever the cache method is called, the `RedisCacheClient `class is reinitialized, and in the `__init__` function of `RedisCacheClient`, the connection pool is set to empty. This causes the `_get_connection_pool` method of `RedisCacheClient` to always create a new connection pool instead of using the existing one. {{{ class RedisCacheClient: def __init__( self, servers, serializer=None, pool_class=None, parser_class=None, **options, ): import redis self._lib = redis self._servers = servers self._pools = {} # << === set pools def _get_connection_pool(self, write): index = self._get_connection_pool_index(write) # # self._pools is is always empty. # if index not in self._pools: self._pools[index] = self._pool_class.from_url( self._servers[index], **self._pool_options, ) return self._pools[index] }}} One solution is to put `_pools` outside of `__init__` , for example: {{{ class RedisCacheClient: # init pool _pools = {} def __init__( self, servers, serializer=None, pool_class=None, parser_class=None, **options, ): import redis self._lib = redis self._servers = servers ## self._pools={} }}} By the way, I am using Django 5.0.7 and running it in asynchronous mode. -- Ticket URL: <https://code.djangoproject.com/ticket/35651> Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines. -- You received this message because you are subscribed to the Google Groups "Django updates" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-updates+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/010701910d6a11b0-ad04f644-63bd-4604-aaec-8f43cc247771-000000%40eu-central-1.amazonses.com.