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},
}
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():
Luego, en tu otra vista, puedes recuperar la variable de la caché utilizando cache.get():
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:
Esto utilizará el almacén de caché “default” para cachear el conjunto de consultas “bo”.