es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo utilizar los resultados almacenados en caché en cacheops con Django

Estoy tratando de usar cacheops donde tengo una vista que contiene una variable que quiero almacenar en caché.

bo = Bo.objects.all().cache()

Intenté usar el “bo” en caché en otra vista de esta manera:

all = cache.get('bo')

Esto no funciona. Aquí está el rastreo de errores:

....
  File "C:\Users\Ptar\AppData\Local\Programs\Python\Python39\lib\site-packages\cacheops\simple.py", line 83, in get
    return self._get(get_prefix() + cache_key)
  File "C:\Users\Ptar\AppData\Local\Programs\Python\Python39\lib\site-packages\cacheops\simple.py", line 99, in _get
    raise CacheMiss
cacheops.simple.CacheMiss

Mi settings.py:

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    },
    'select2': {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/2",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}

CACHEOPS_DEGRADE_ON_FAILURE=True
CACHEOPS_ENABLED = True
CACHEOPS_REDIS = {
    'host': 'localhost',
    'port': 6379,
}
CACHEOPS = {
    'libman.*': {'ops': 'all', 'timeout': 60*15},
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema parece ser que estás intentando recuperar una variable en caché utilizando el método cache.get(), pero en realidad no has establecido la variable en la caché utilizando el método cache.set().

    Para solucionar esto, puedes cambiar tu código para establecer primero la variable en la caché utilizando cache.set():

    bo = Bo.objects.all().cache()
    cache.set('bo', bo)
    

    Luego, en tu otra vista, puedes recuperar la variable de la caché utilizando cache.get():

    all = cache.get('bo')
    

    Esto debería recuperar la variable en caché y asignarla a la variable “all” en tu segunda vista.

    Además, es importante tener en cuenta que has definido dos almacenes de caché en tu archivo settings.py, “default” y “select2”. Sin embargo, no has especificado cuál almacén de caché utilizar en tu código. Para especificar qué almacén de caché utilizar, puedes agregar un argumento “cache” a tu llamada a la función cache() de la siguiente manera:

    bo = Bo.objects.all().cache(cache_name='default')
    

    Esto utilizará el almacén de caché “default” para cachear el conjunto de consultas “bo”.

Comments are closed.