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)