Django_redis的一些方法与Celery配置

1. django_redis数据库导入和存储数据
from django_redis import get_redis_connection #导如django_redis包

# reids数据库有16个库,每个库都存储某中数据,所以在存储之前要在django的setting里给redis存储的某个库配置名称
变量名 = get_redis_connection(redis数据库的某个库名)
变量名.setex(在redis里存储的键,存储的过期时间秒为单位,在redis里存储的值)
变量名.get(在redis里要查询的键名)
2. django_redis数据库通过管道导入和存储数据

管道:django_redis中的管道,可以使客户端一次发送多个请求,等请求发送完之后,redis数据库一次性读取全部请求,然后给出响应。可以节省资源。只需要与redis数据库进行一次交互。。

from django_redis import get_redis_connection  # 导入django——redis的包

# reids数据库有16个库,每个库都存储某中数据,所以在存储之前要在django的setting里给redis存储的某个库配置名称
变量名1 = get_redis_connection(redis数据库的某个库名)
变量名2 = 变量名1.pipeline()
变量名2.setex(在redis里存储的键,存储的过期时间秒为单位,在redis里存储的值)
# 开启管道(很重要,否则对数据库的操作执行不了)
变量名2.execute()
Celery配置文件(创建一个新的进程执行耗时代码)
main.py(主文件)
from celery import Celery
import os
# 3. 读取django的配置。设置django的环境变量 (和manage.py里面的差不多,没必要上设置default,直接加入环境变量里就可以)
os.environ["DJANGO_SETTINGS_MODULE"] = "meiduo_mall.settings.dev"

# 1.创建celery实例-----小括号里面的是给Celery起的名字
celery_app = Celery('meiduo')

# 2.加载celery配置
celery_app.config_from_object('celery_tasks.config')

# 4. 加载任务
celery_app.autodiscover_tasks([
    # 因为tasks.py文件是固定的,所以只要写到celery_tasks.sms就行了。会自动找到tasks.py文件
    # 而tasks.py文件里只要加了装饰其的都被识别成任务,所以也不要去写了
    "celery_tasks.sms"
])config.py文件(配置文件)
config.py(配置文件)
# Celery配置  5672是rabbitMQ的端口
# 指定rabbit作为celery的队列
# broker_url= 'amqp://guest:guest@192.168.103.158:5672'
# 指定自己的本机ip地址
broker_url= 'amqp://guest:guest@127.0.0.1:5672'
tasks.py
#TODO 这个文件的名字是固定的。不能改名字
from celery_tasks.main import celery_app
# 导入发送手机验证码的包
from meiduo_mall.libs.yuntongxun.sms import CCP
# 导入发送的短信过期时间的包
from celery_tasks.sms import constans

# 将celery的装饰其,装饰send_sms
"""
    bind:保证task对象会作为第一个参数自动传入
    name:异步任务别名
    retry_backoff:异常自动重试的时间间隔 第n次(retry_backoff×2^(n-1))s
    max_retries:异常自动重试次数的上限
"""
@celery_app.task(bind=True, name="send_sms")
# self为指定当前任务对象
def send_sms(self, mobile,sms_code,retry_backoff=3):
    # 3. 发短信
    # 将耗时的代码封装在一个方法中
    ccp = CCP()
    # 如果成功会返回0,失败会返回-1
    ret = ccp.send_template_sms(mobile, [sms_code, constans.SMS_CODE_EXPIRES / 60], 1)
    
    # 所以要做一个判断
    if ret != 0:
        # 有异常自动重试3次
        raise self.retry(exc=Exception('发送短信失败'), max_retries=3)
    # 如果成功了返回0
    return ret
启动celery
  • 项目的根目录下输入:
# 需要先cd到项目得根目录下
celery -A celery_tasks.main worker -l info
# -A表示输出主文件的位置   -l表示输出日志的级别(-l可以不要)
  • 调用celery
  • 视图函数中调用:
#通过delay调用,可以在celery中去运行(将任务加到队列中,交给celery去运行)
        send_sms.delay(参数1, 参数2)