fix: clear_cache for shared cache
This commit is contained in:
parent
757f283eea
commit
850cc58664
3 changed files with 7 additions and 7 deletions
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue