perf: client-cache for defaults
This commit is contained in:
parent
d3dd7651dc
commit
06816f2817
3 changed files with 14 additions and 4 deletions
|
|
@ -109,9 +109,10 @@ def clear_global_cache():
|
||||||
|
|
||||||
def clear_defaults_cache(user=None):
|
def clear_defaults_cache(user=None):
|
||||||
if user:
|
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":
|
elif frappe.flags.in_install != "frappe":
|
||||||
frappe.cache.delete_value("defaults")
|
frappe.client_cache.delete_keys("defaults::*")
|
||||||
|
|
||||||
|
|
||||||
def clear_doctype_cache(doctype=None):
|
def clear_doctype_cache(doctype=None):
|
||||||
|
|
|
||||||
|
|
@ -234,7 +234,9 @@ def clear_default(key=None, value=None, parent=None, name=None, parenttype=None)
|
||||||
|
|
||||||
def get_defaults_for(parent="__default"):
|
def get_defaults_for(parent="__default"):
|
||||||
"""get all defaults"""
|
"""get all defaults"""
|
||||||
defaults = frappe.cache.hget("defaults", parent)
|
|
||||||
|
key = f"defaults::{parent}"
|
||||||
|
defaults = frappe.client_cache.get_value(key)
|
||||||
|
|
||||||
if defaults is None:
|
if defaults is None:
|
||||||
# sort descending because first default must get precedence
|
# sort descending because first default must get precedence
|
||||||
|
|
@ -260,7 +262,7 @@ def get_defaults_for(parent="__default"):
|
||||||
elif d.defvalue is not None:
|
elif d.defvalue is not None:
|
||||||
defaults[d.defkey] = d.defvalue
|
defaults[d.defkey] = d.defvalue
|
||||||
|
|
||||||
frappe.cache.hset("defaults", parent, defaults)
|
frappe.client_cache.set_value(key, defaults)
|
||||||
|
|
||||||
return defaults
|
return defaults
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -529,6 +529,13 @@ class ClientCache:
|
||||||
with self.lock:
|
with self.lock:
|
||||||
self.cache.pop(key, None)
|
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):
|
def run_invalidator_thread(self):
|
||||||
self._watcher = self.invalidator.pubsub()
|
self._watcher = self.invalidator.pubsub()
|
||||||
self._watcher.subscribe(**{"__redis__:invalidate": self._handle_invalidation})
|
self._watcher.subscribe(**{"__redis__:invalidate": self._handle_invalidation})
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue