fix: clear_cache for shared cache

This commit is contained in:
Saqib Ansari 2026-04-20 14:19:05 +05:30
parent 757f283eea
commit 850cc58664
3 changed files with 7 additions and 7 deletions

View file

@ -23,14 +23,14 @@ from functools import wraps
import frappe import frappe
from frappe.exceptions import ServiceUnavailableError from frappe.exceptions import ServiceUnavailableError
from frappe.utils import cint from frappe.utils import cint
from frappe.utils.caching import site_cache from frappe.utils.caching import redis_cache
from frappe.utils.redis_semaphore import RedisSemaphore from frappe.utils.redis_semaphore import RedisSemaphore
# Default wait timeout (seconds) before returning 503 to the caller. # Default wait timeout (seconds) before returning 503 to the caller.
_DEFAULT_WAIT_TIMEOUT = 10 _DEFAULT_WAIT_TIMEOUT = 10
@site_cache(ttl=3600) @redis_cache(shared=True)
def _default_limit() -> int: def _default_limit() -> int:
"""Derive a sensible default concurrency limit from gunicorn's max concurrency.""" """Derive a sensible default concurrency limit from gunicorn's max concurrency."""
return max(1, gunicorn_max_concurrency() // 2) return max(1, gunicorn_max_concurrency() // 2)

View file

@ -180,7 +180,7 @@ def redis_cache(ttl: int | None = 3600, user: str | bool | None = None, shared:
func_key = f"{func.__module__}.{func.__qualname__}" func_key = f"{func.__module__}.{func.__qualname__}"
def clear_cache(): def clear_cache():
frappe.cache.delete_keys(func_key) frappe.cache.delete_keys(func_key, user=user, shared=shared)
func.clear_cache = clear_cache func.clear_cache = clear_cache
func.ttl = ttl if not callable(ttl) else 3600 func.ttl = ttl if not callable(ttl) else 3600

View file

@ -125,19 +125,19 @@ class RedisWrapper(redis.Redis):
return ret return ret
def get_keys(self, key): def get_keys(self, key, user=None, shared=False):
"""Return keys starting with `key`.""" """Return keys starting with `key`."""
try: try:
key = self.make_key(key + "*") key = self.make_key(key + "*", user=user, shared=shared)
return self.keys(key) return self.keys(key)
except redis.exceptions.ConnectionError: except redis.exceptions.ConnectionError:
regex = re.compile(cstr(key).replace("|", r"\|").replace("*", r"[\w]*")) regex = re.compile(cstr(key).replace("|", r"\|").replace("*", r"[\w]*"))
return [k for k in list(frappe.local.cache) if regex.match(cstr(k))] return [k for k in list(frappe.local.cache) if regex.match(cstr(k))]
def delete_keys(self, key): def delete_keys(self, key, user=None, shared=False):
"""Delete keys with wildcard `*`.""" """Delete keys with wildcard `*`."""
self.delete_value(self.get_keys(key), make_keys=False) self.delete_value(self.get_keys(key, user=user, shared=shared), make_keys=False)
def delete_key(self, *args, **kwargs): def delete_key(self, *args, **kwargs):
self.delete_value(*args, **kwargs) self.delete_value(*args, **kwargs)