在我的django项目中,我每隔5分钟运行一次任务(使用Celery和Redis作为代理):
from django.core.cache import cache
@shared_task()
@celery.task(base=QueueOnce)
def cache_date():
cache.set('date', datetime.now)
print('Cached date : ', cache.get('date'))
它运行良好,每次运行时都打印新的缓存日期
但是然后,在我的一种观点中,我尝试这样做:
from django.core.cache import cache
def get_cached_date():
print('Cached date :', cache.get('date')
然后显示“缓存日期:无”
这是我的缓存设置:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
'LOCATION': '/tmp/cache',
}
}
我不明白,为什么当我使用单一位置文件时,该值在一个地方可用而在另一个地方不可用?我在尝试做错什么吗?
更新
@Satevg我使用docker-compose,这是我的文件:
services:
redis:
image: redis
worker:
image: project
depends_on:
- redis
- webserver
command: project backend worker
volumes:
- cache:/tmp/cache
webserver:
image: project
depends_on:
- redis
volumes:
- cache:/tmp/cache
volumes:
cache:
我试图共享这样的卷,但是当我的任务试图写入缓存时,我得到了:
OSError: [Errno 13] Permission denied: '/tmp/cache/tmpAg_TAc'
当我查看两个容器中的文件系统时,我可以看到文件夹/ tmp / cache,Web应用程序甚至可以在其上写东西;当我查看工作人员的容器/ tmp / cache文件夹时,我可以看到更新的缓存< / p>
UPDATE2:
Web应用程序可以写入缓存。
cache.set('test', 'Test')
在工作人员的容器上,我可以看到/ tmp / cache文件夹中的缓存文件 当任务尝试从缓存中读取时:
print(cache.get('test'))
它说:
None
当任务尝试从缓存中写入数据时,它仍会显示Errno13
答案 0 :(得分:0)
正如我们在评论中指出的那样,celery和app在不同的docker容器中工作。
django.core.cache.backends.filebased.FileBasedCache
序列化每个缓存值并将其存储为单独的文件。但是这些文件位于不同的文件系统中。
解决方案是使用docker volumes以便在这两个容器之间共享/tmp/cache
文件夹。