双写一致性
加入了缓存后,缓存有数据,先去缓存拿,但mysql中数据边了,缓存中数据不会自动变化,出现不一致问题,
#双写一致性
写入mysql,rredis没有改,导致数据不一致
#解决方法
-1 修改数据,删除缓存
-2 修改数据,更新缓存
-3 定时更新缓存---》实时性差一点
#定时任务celery
在celery中配置任务
app.conf.beat_schedule={
"update_banner":{
"task":"celery_task.home_task.update_banner",
"schedule":timedelta(seconds=3)},
}
启动worker,启动beat
celery -A 路径 beta -l info
celery -A 路径 beta -l info -p eventlet
#更新代码
from home.models import Banner
from home.serializer import BannerSerializer
from django.core.cache import cache
from django.conf import settings
@app.task
def update_banner():
# 只要这个任务一执行,就更新轮播图的缓存
banners = Banner.objects.all().filter(is_delete=False, is_show=True).order_by('orders')
ser = BannerSerializer(instance=banners, many=True)
for item in ser.data:
item['image'] = settings.BACKEND_URL + item['image']
cache.set('banner_list', ser.data) # 会出问题,轮播图地址显示不全
return True