diff --git a/frappe/cache_manager.py b/frappe/cache_manager.py index c3010368a9..5c44f79fcd 100644 --- a/frappe/cache_manager.py +++ b/frappe/cache_manager.py @@ -109,9 +109,10 @@ def clear_global_cache(): def clear_defaults_cache(user=None): if user: - frappe.cache.hdel("defaults", [user, *common_default_keys]) + for key in [user, *common_default_keys]: + frappe.client_cache.delete_value(f"defaults::{key}") elif frappe.flags.in_install != "frappe": - frappe.cache.delete_value("defaults") + frappe.client_cache.delete_keys("defaults::*") def clear_doctype_cache(doctype=None): diff --git a/frappe/defaults.py b/frappe/defaults.py index 9009e2e03b..c1868f6f95 100644 --- a/frappe/defaults.py +++ b/frappe/defaults.py @@ -234,7 +234,9 @@ def clear_default(key=None, value=None, parent=None, name=None, parenttype=None) def get_defaults_for(parent="__default"): """get all defaults""" - defaults = frappe.cache.hget("defaults", parent) + + key = f"defaults::{parent}" + defaults = frappe.client_cache.get_value(key) if defaults is None: # sort descending because first default must get precedence @@ -260,7 +262,7 @@ def get_defaults_for(parent="__default"): elif d.defvalue is not None: defaults[d.defkey] = d.defvalue - frappe.cache.hset("defaults", parent, defaults) + frappe.client_cache.set_value(key, defaults) return defaults diff --git a/frappe/utils/redis_wrapper.py b/frappe/utils/redis_wrapper.py index 177d1885da..24160183a2 100644 --- a/frappe/utils/redis_wrapper.py +++ b/frappe/utils/redis_wrapper.py @@ -529,6 +529,13 @@ class ClientCache: with self.lock: self.cache.pop(key, None) + def delete_keys(self, pattern): + keys = self.redis.get_keys(pattern) + self.redis.delete_value(keys, shared=True, make_keys=False) + with self.lock: + for key in keys: + self.cache.pop(key, None) + def run_invalidator_thread(self): self._watcher = self.invalidator.pubsub() self._watcher.subscribe(**{"__redis__:invalidate": self._handle_invalidation})