中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

django緩存信號高并發問題

發布時間:2020-05-29 08:57:11 來源:網絡 閱讀:449 作者:魂逗蘿 欄目:編程語言

django緩存進階

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('用戶列表頁面: <br> %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 future import 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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长春市| 北碚区| 兴国县| 项城市| 屯留县| 武义县| 衡东县| 伊金霍洛旗| 龙胜| 桑日县| 永安市| 天全县| 延安市| 荆门市| 六安市| 且末县| 望奎县| 东乡县| 海伦市| 城口县| 永兴县| 梓潼县| 从化市| 宁波市| 泰来县| 乐东| 开江县| 佳木斯市| 固原市| 建始县| 永宁县| 博爱县| 马龙县| 肇州县| 都匀市| 常州市| 喜德县| 江城| 密云县| 日照市| 桂阳县|