django缓存进阶

网站设计制作、成都网站建设,成都做网站公司-创新互联公司已向1000+企业提供了,网站设计,网站制作,网络营销等服务!设计与技术结合,多年网站推广经验,合理的价格为您打造企业品质网站。
django六种缓存策略
开发调试
内存
文件
数据库
Memcache缓存(python-memcached模块)
Memcache缓存(pylibmc模块)缓存页面
1,@cache_page方法缓存
添加@cache_page装饰器缓存参数缓存时间,缓存方案,以及前缀
@cache_page(timeout=10,cache='html',key_prefix='page')
def list(request):
验证是否登录
chrs = string.ascii_letters
char = random.choice(chrs)
return HttpResponse('用户列表页面: 
 %s' % char)2,添加中间件进行缓存,创建缓存中间件,每次有请求前先判断
class CachePageMiddleware(MiddlewareMixin):
配置缓存的页面路径
cache_page_path = [
    '/user/list/'
]
# 实现process_request和process_response来判断缓存,request.path
def process_request(self, request):
    # 判断当前的请求是否支持缓存
    if request.path in self.cache_page_path:
        # 判断页面是否已缓存
        if cache.has_key(request.path):
            return HttpResponse(cache.get(request.path))
def process_response(self, request, response):
    # 判断当前请求路径是否要被缓存
    if request.path in self.cache_page_path:
        # 设置响应内容为缓存的内容,请求路径,响应,超时
        cache.set(request.path,
                  response.content, timeout=5)
    return response用redis进行的缓存
在settings中配置缓存项
CACHES = {
# 设置默认缓存
'default': {
    # 缓存的方法,django-radis.cache.RedisCache
    'BACKEND': 'django_redis.cache.RedisCache',
    # 设置缓存的路径
    'LOCATION': 'redis://127.0.0.1:6379/10',
    # 设置缓存的路径,用户类型,连接超时,
    'OPTIONS': {
        'CLIENT_CLASS': 'django_redis.client.DefaultClient',
        'SOCKET_CONNECT_TIMEOUT': 10,
        'SOCKET_TIMEOUT': 10
    }
}}
用session设置缓存
缓存引擎
SESSION_ENGINE='django.contrib.session.backends.cache'
缓存cookie名字
SESSION_COOKIE_NAME='SESSION_ID'
缓存路径
SESSION_COOKIE_PATH='/'
SESSION_CACHE_ALIAS='default'
缓存生存周期
SESSION_COOKIE_AGE='1209600'
信号机制
监控django的内部事件
复杂业务解耦
接收内置的信号
先设置普通的接收信号,使用信号的connect()函数
from django.db.models.signals impoer pre_delete
def model_delete_pre(sender,**kwargs):
from user.models import Order
if sender == Order:
    print('')pre_delete.connect(model_delete_pre)
使用装饰器方式接收信号和连接信息处理函数
from django.dispatch import receiver
@receiver(post_delete)
def delete_model_post(sender,**kwargs):
print(sender,kwargs)
pre_delete.connect(delete_model_post)
自定义信号
创建signals包,并在init中声明
from django import dispatch
codeSignal = dispatch.Signal(providing_args=['path','phone','code'])
发送信息
根据业务需求,在适当位置发送信息
def new_code(request):
# 生成手机验证码
# 随机产生验证码,
code_text = code_new_code_str(4)
print(code_text)
phone = request.GET.get('phone')
print(phone)
# 将信号发送出去
signal.codeSignal.send('new_code',
                       path = 'request.path',
                       phone = phone,
                       code = code_text)
return HttpResponse('%s...' % phone)接收信号
from signals import codeSignal
from django import dispatch
@dispatch.receiver(codeSignal)
def cache_code(sender,**kwargs):
print('...')
print(sender,kwargs)
HttpResponse的子类
JsonResponse
HttpResponseRedirect
HttpresopnseNotAllow
HttpResponseGone
django中间件相关函数
process_request()
process_response()
process_view()
process_exception()
process_template_response()
分页器属性
bumber
object_list
has_previous
has_next
previous_page_number
next_page_number
高并发解决方案
使用celery+redis队列
celery解决c10k问题,通过中间件和后台任务执行单元解决高并发问题
celery组成部分
消息中间件broker
任务执行单元worker
存储任务执行单元存储result
配置
相关文档: http://docs.celeryproject.org/en/latest/django/index.html
win在celery后不支持多进程方式执行需要该换成协程方式
在主目录创建celery
from futureimport absolute_import ,unicode_literals
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE','advicedjango.settings')
app = Celery('advicedjango',
broker='redis://10.36.174.1:6379/8')
app.config_from_object('django.conf.settings')
app.autodiscover_tasks()
在主项目的init脚本添加all属性
from .celery import app as celer_app
all= ('celery',)
在应用模块中,创建tesk任务模块
from celery import shared_task
@shared_task
def qbuy(id,name):
print(id,name)
time.sleep(1)
return '%s,%s % (id,name)'
在settings中,配置celery项
CELERY_IMPORTS = ('stockapp.tasks',)
启动celery
celery -A advicedjango worker -P gevent -I info
-A 指定项目,-P 指定协程 -I 指定信息
qbuy('1991',3)
Celery服务接收任务,并执行,可以看到执行的结果,
但是结果发出的警告。因为没有处理执行单元完成任务的结果。
pip3 install django-celery-results
在settings中配置result方案
添加'django_celery_result'
添加CELERY_RESULT_BACKEND = 'django-db', django-cache
进行新馆库的迁移
python manage.py migrate django_celery_results
迁移成功后重新启动Celery
当前题目:django缓存信号高并发问题
当前网址:http://www.scyingshan.cn/article/gseppd.html

 建站
建站
 咨询
咨询 售后
售后
 建站咨询
建站咨询 
 