|
1 |
| -from django import VERSION as DJANGO_VERSION |
2 |
| -from django_redis import cache, exceptions |
| 1 | +from django.core.cache.backends.redis import RedisCache |
3 | 2 |
|
4 | 3 | from django_prometheus.cache.metrics import (
|
5 | 4 | django_cache_get_fail_total,
|
|
9 | 8 | )
|
10 | 9 |
|
11 | 10 |
|
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): |
| 11 | +class NativeRedisCache(RedisCache): |
| 12 | + def get(self, key, default=None, version=None): |
| 13 | + django_cache_get_total.labels(backend="native_redis").inc() |
17 | 14 | 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 |
| 15 | + result = super().get(key, default=None, version=version) |
| 16 | + except Exception: |
| 17 | + django_cache_get_fail_total.labels(backend="native_redis").inc() |
26 | 18 | raise
|
| 19 | + if result is not None: |
| 20 | + django_cache_hits_total.labels(backend="native_redis").inc() |
| 21 | + return result |
27 | 22 | 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 |
38 |
| - |
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 |
| 23 | + django_cache_misses_total.labels(backend="native_redis").inc() |
| 24 | + return default |
0 commit comments