|
1 | | -from django import VERSION as DJANGO_VERSION |
2 | | -from django_redis import cache, exceptions |
| 1 | +from warnings import deprecated |
| 2 | +from django.core.cache.backends.redis import RedisCache |
3 | 3 |
|
4 | 4 | from django_prometheus.cache.metrics import ( |
5 | 5 | django_cache_get_fail_total, |
|
9 | 9 | ) |
10 | 10 |
|
11 | 11 |
|
12 | | -class RedisCache(cache.RedisCache): |
13 | | - """Inherit redis to add metrics about hit/miss/interruption ratio""" |
14 | | - |
15 | | - @cache.omit_exception |
16 | | - def get(self, key, default=None, version=None, client=None): |
| 12 | +class NativeRedisCache(RedisCache): |
| 13 | + def get(self, key, default=None, version=None): |
| 14 | + django_cache_get_total.labels(backend="native_redis").inc() |
17 | 15 | try: |
18 | | - django_cache_get_total.labels(backend="redis").inc() |
19 | | - cached = self.client.get(key, default=None, version=version, client=client) |
20 | | - except exceptions.ConnectionInterrupted as e: |
21 | | - django_cache_get_fail_total.labels(backend="redis").inc() |
22 | | - if self._ignore_exceptions: |
23 | | - if self._log_ignored_exceptions: |
24 | | - cache.logger.error(str(e)) |
25 | | - return default |
| 16 | + result = super().get(key, default=None, version=version) |
| 17 | + except Exception: |
| 18 | + django_cache_get_fail_total.labels(backend="native_redis").inc() |
26 | 19 | raise |
| 20 | + if result is not None: |
| 21 | + django_cache_hits_total.labels(backend="native_redis").inc() |
| 22 | + return result |
27 | 23 | else: |
28 | | - if cached is not None: |
29 | | - django_cache_hits_total.labels(backend="redis").inc() |
30 | | - return cached |
31 | | - else: |
32 | | - django_cache_misses_total.labels(backend="redis").inc() |
33 | | - return default |
34 | | - |
35 | | - |
36 | | -if DJANGO_VERSION >= (4, 0): |
37 | | - from django.core.cache.backends.redis import RedisCache as DjangoRedisCache |
| 24 | + django_cache_misses_total.labels(backend="native_redis").inc() |
| 25 | + return default |
38 | 26 |
|
39 | | - class NativeRedisCache(DjangoRedisCache): |
40 | | - def get(self, key, default=None, version=None): |
41 | | - django_cache_get_total.labels(backend="native_redis").inc() |
42 | | - try: |
43 | | - result = super().get(key, default=None, version=version) |
44 | | - except Exception: |
45 | | - django_cache_get_fail_total.labels(backend="native_redis").inc() |
46 | | - raise |
47 | | - if result is not None: |
48 | | - django_cache_hits_total.labels(backend="native_redis").inc() |
49 | | - return result |
50 | | - else: |
51 | | - django_cache_misses_total.labels(backend="native_redis").inc() |
52 | | - return default |
| 27 | +RedisCache = deprecated("RedisCache is deprecated, use NativeRedisCache instead")(NativeRedisCache) |
0 commit comments