Merge pull request #16448 from resilient-tech/perf-get_cached_value
perf: ~90% faster `get_cached_value` from Redis cache
This commit is contained in:
commit
0c85ca1e59
1 changed files with 17 additions and 10 deletions
|
|
@ -851,18 +851,25 @@ def set_value(doctype, docname, fieldname, value=None):
|
|||
return frappe.client.set_value(doctype, docname, fieldname, value)
|
||||
|
||||
def get_cached_doc(*args, **kwargs):
|
||||
allow_dict = kwargs.pop("_allow_dict", False)
|
||||
|
||||
def _respond(doc, from_redis=False):
|
||||
if not allow_dict and isinstance(doc, dict):
|
||||
local.document_cache[key] = doc = get_doc(doc)
|
||||
|
||||
elif from_redis:
|
||||
local.document_cache[key] = doc
|
||||
|
||||
return doc
|
||||
|
||||
if key := can_cache_doc(args):
|
||||
# local cache
|
||||
doc = local.document_cache.get(key)
|
||||
if doc:
|
||||
return doc
|
||||
if doc := local.document_cache.get(key):
|
||||
return _respond(doc)
|
||||
|
||||
# redis cache
|
||||
doc = cache().hget('document_cache', key)
|
||||
if doc:
|
||||
doc = get_doc(doc)
|
||||
local.document_cache[key] = doc
|
||||
return doc
|
||||
if doc := cache().hget('document_cache', key):
|
||||
return _respond(doc, True)
|
||||
|
||||
# database
|
||||
doc = get_doc(*args, **kwargs)
|
||||
|
|
@ -895,9 +902,9 @@ def clear_document_cache(doctype, name):
|
|||
del local.document_cache[key]
|
||||
cache().hdel('document_cache', key)
|
||||
|
||||
def get_cached_value(doctype, name, fieldname, as_dict=False):
|
||||
def get_cached_value(doctype, name, fieldname="name", as_dict=False):
|
||||
try:
|
||||
doc = get_cached_doc(doctype, name)
|
||||
doc = get_cached_doc(doctype, name, _allow_dict=True)
|
||||
except DoesNotExistError:
|
||||
clear_last_message()
|
||||
return
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue