redis 双写一致性

发布时间 2023-06-22 18:59:31作者: 哈哈哈哼

双写一致性

加入了缓存后,缓存有数据,先去缓存拿,但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