双写一致性之定时更新

使用celery,对缓存进行定时更新操作

 home_task.py

from .celery import app
from home.models import Banner
from django.conf import settings
from home.serialzier import BannerSerializer
from django.core.cache import cache



@app.task
def update_banner():
    # 查询数据库,拿到所有轮播图,序列化后,放到缓存中
    banner_list = Banner.objects.all().filter(is_delete=False, is_show=True).order_by('orders')[:settings.BANNER_COUNT]
    ser = BannerSerializer(instance=banner_list, many=True)
    # 如果在视图类中,做序列化 ,因为视图类中有request对象,所以像图片这种,会自动加前面地址,
    # 在这里没有request对象,需要手动拼
    for item in ser.data:
        item['image'] = settings.BACKEND_URL + item['image']
    cache.set('home_banner_list', ser.data)
    return True

celery.py

from celery import Celery

# 一、加载django配置环境
import os

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "luffy_api.settings.dev")

broker = 'redis://127.0.0.1:6379/1'  # 消息中间件 redis
backend = 'redis://127.0.0.1:6379/2'  # 结果存储 redis
app = Celery(__name__, broker=broker, backend=backend,
             include=['celery_task.course_task', 'celery_task.home_task', 'celery_task.user_task'])

### 3 定时任务要写在这里
# 时区
app.conf.timezone = 'Asia/Shanghai'
# 是否使用UTC
app.conf.enable_utc = False

# 任务的定时配置
from datetime import timedelta
from celery.schedules import crontab

app.conf.beat_schedule = {
    'update_banner': {
        'task': 'celery_task.home_task.update_banner',
        'schedule': timedelta(hours=5),
        'args': (),
    },
    # 'send_sms': {
    #     'task': 'celery_task.user_task.send_sms',
    #     'schedule': timedelta(seconds=5),
    #     # 'schedule': crontab(hour=8, day_of_week=1),  # 每周一早八点
    #     'args': ('1822344343', 8888),
    # },
    # 'add_course': {
    #     'task': 'celery_task.course_task.add_course',
    #     # 'schedule': crontab(hour=8, day_of_week=1),  # 每周一早八点
    #     'schedule': crontab(hour=11, minute=38),  # 每天11点35,执行
    #     'args': (),
    # }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

骑猪去兜风z1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值