Explorar el Código

perf: 90% faster `get_cached_value` from Redis cache

version-14
Sagar Vora hace 3 años
padre
commit
2775364afd
Se han modificado 1 ficheros con 17 adiciones y 10 borrados
  1. +17
    -10
      frappe/__init__.py

+ 17
- 10
frappe/__init__.py Ver fichero

@@ -851,18 +851,25 @@ def set_value(doctype, docname, fieldname, value=None):
return frappe.client.set_value(doctype, docname, fieldname, value) return frappe.client.set_value(doctype, docname, fieldname, value)


def get_cached_doc(*args, **kwargs): 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): if key := can_cache_doc(args):
# local cache # local cache
doc = local.document_cache.get(key)
if doc:
return doc
if doc := local.document_cache.get(key):
return _respond(doc)


# redis cache # 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 # database
doc = get_doc(*args, **kwargs) doc = get_doc(*args, **kwargs)
@@ -895,9 +902,9 @@ def clear_document_cache(doctype, name):
del local.document_cache[key] del local.document_cache[key]
cache().hdel('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: try:
doc = get_cached_doc(doctype, name)
doc = get_cached_doc(doctype, name, _allow_dict=True)
except DoesNotExistError: except DoesNotExistError:
clear_last_message() clear_last_message()
return return


Cargando…
Cancelar
Guardar