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
-