成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Django-緩存

aervon / 3435人閱讀

摘要:自帶了一個(gè)健壯的緩存系統(tǒng)來保存動(dòng)態(tài)頁面,避免每次請求都重新計(jì)算。緩存中的和方法是很常見的。盡量放在第一個(gè)繼承的類設(shè)置過期時(shí)間根據(jù)自己需求加緩存。目前這個(gè)緩存使用的是內(nèi)存。

概述:對于中等流量的網(wǎng)站來說,盡可能的減少開銷是非常必要的。緩存數(shù)據(jù)就是為了保存那些需要很多計(jì)算資源的結(jié)果,這樣的話就不必在下次重復(fù)消耗計(jì)算資源。獲取數(shù)據(jù)的數(shù)據(jù)的時(shí)候就是去緩存中拿,拿到了直接返回,沒拿到就去數(shù)據(jù)庫中查詢,篩選,然后緩存到數(shù)據(jù)庫, 然后返回給模板。

Django自帶了一個(gè)健壯的緩存系統(tǒng)來保存動(dòng)態(tài)頁面,避免每次請求都重新計(jì)算。

Django提供了不同級別的緩存策略,可以緩存特定的視圖的輸出、可以僅僅緩存那些很難計(jì)算出來的部分、或者緩存整個(gè)網(wǎng)站

目的:優(yōu)化數(shù)據(jù)結(jié)構(gòu);優(yōu)化了對數(shù)據(jù)的查詢;篩選,過濾;減少了對磁盤的IO

官方文檔:https://docs.djangoproject.co...

設(shè)置緩存

通過設(shè)置決定把數(shù)據(jù)緩存在哪里,是數(shù)據(jù)庫中、文件系統(tǒng)中還是內(nèi)存中

默認(rèn)緩存(內(nèi)存)
CACHES={
    "default":{
        "BACKEND":"django.core.cache.backends.locmem.LocMemCache",
        "LOCATION": "unique-snowflake",
        "TIMEOUT":60
    }
}

參數(shù)TIMEOUT:緩存的默認(rèn)過期時(shí)間,以秒為單位

默認(rèn)為300秒

設(shè)置為None,表示永不過期

設(shè)置為0造成緩存立即失效

文件緩存
CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.filebased.FileBasedCache",
        "LOCATION": "c:/foo/bar",
        "TIMEOUT":300,
    }
}
數(shù)據(jù)庫緩存
CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.db.DatabaseCache",
        "LOCATION": "my_cache_table",
        "TIMEOUT": "60",
        "KEY_PREFIX": "bbs",
        "VERSION": "1",
        "OPTIONS": {
            "MAX_ENTRIES": "300"
        }
    }
}

創(chuàng)建緩存表:?python manage.py createcachetable

drf的緩存

https://github.com/chibisov/drf-extensions

這是drf的一個(gè)擴(kuò)展,不止增強(qiáng)了緩存還有其他的。

pip install drf-extensions

緩存viewset中的retrieve和list 方法是很常見的。這就是為什么CacheResponseMixin存在。

獲取數(shù)據(jù)的才會(huì)用到cache

from rest_framework_extensions.cache.mixins import CacheResponseMixin

把這個(gè)CacheResponseMixin,放在list之前。盡量放在第一個(gè)繼承的類

class GoodsListViewSet(CacheResponseMixin,mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet):
設(shè)置過期時(shí)間
REST_FRAMEWORK_EXTENSIONS = {
    "DEFAULT_CACHE_RESPONSE_TIMEOUT": 5
}

根據(jù)自己需求加緩存。目前這個(gè)緩存使用的是內(nèi)存。每次系統(tǒng)重啟會(huì)丟失。

redis緩存

官網(wǎng):?http://django-redis-chs.readt...

redis操作文檔:http://redisdoc.com

默認(rèn)使用redis中的1數(shù)據(jù)庫,但可以指定使用哪個(gè)db

安裝pip install django-redis

配置
# ---配置Session和Cache---
CACHES={
    "default":{
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION":"127.0.0.1:6379/12", # 指定db12
        "TIMEOUT":60,
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",  # 指定連接Redis的客戶端類
            # "PASSWORD": "mysecret",
             # "SOCKET_CONNECT_TIMEOUT": 5,  # in seconds
             # "SOCKET_TIMEOUT": 5,  # in seconds
             # "CONNECTION_POOL_KWARGS": {"max_connections": 100},
             # "CONNECTION_POOL_CLASS": "myproj.mypool.MyOwnPool",
        }
    }
}
SESSION_ENGINE = "django.contrib.sessions.backends.cache"

# --結(jié)束Session和Cache配置
參數(shù) 解釋
SOCKET_CONNECT_TIMEOUT socket 建立連接超時(shí)設(shè)置
SOCKET_TIMEOUT 連接建立后的讀寫操作超時(shí)設(shè)置
CONNECTION_POOL_KWARGS 設(shè)置連接池的最大連接數(shù)量
CONNECTION_POOL_CLASS 自己的連接池子類
連接池

django-redis 使用 redis-py 的連接池接口, 并提供了簡單的配置方式. 除此之外, 你可以為 backend 定制化連接池的產(chǎn)生。redis-py 默認(rèn)不會(huì)關(guān)閉連接, 盡可能重用連接。

連接池概念

為什么使用連接池?首先Redis也是一種數(shù)據(jù)庫,它基于C/S模式,因此如果需要使用必須建立連接,稍微熟悉網(wǎng)絡(luò)的人應(yīng)該都清楚地知道為什么需要建立連接,C/S模式本身就是一種遠(yuǎn)程通信的交互模式,因此Redis服務(wù)器可以多帶帶作為一個(gè)數(shù)據(jù)庫服務(wù)器來獨(dú)立存在。假設(shè)Redis服務(wù)器與客戶端分處在異地,雖然基于內(nèi)存的Redis數(shù)據(jù)庫有著超高的性能,但是底層的網(wǎng)絡(luò)通信卻占用了一次數(shù)據(jù)請求的大量時(shí)間,因?yàn)槊看螖?shù)據(jù)交互都需要先建立連接,假設(shè)一次數(shù)據(jù)交互總共用時(shí)30ms,超高性能的Redis數(shù)據(jù)庫處理數(shù)據(jù)所花的時(shí)間可能不到1ms,也即是說前期的連接占用了29ms,連接池則可以實(shí)現(xiàn)在客戶端建立多個(gè)鏈接并且不釋放,當(dāng)需要使用連接的時(shí)候通過一定的算法獲取已經(jīng)建立的連接,使用完了以后則還給連接池,這就免去了數(shù)據(jù)庫連接所占用的時(shí)間。

配置默認(rèn)連接池

配置默認(rèn)連接池很簡單, 你只需要在?CACHES?中使用?CONNECTION_POOL_KWARGS?設(shè)置連接池的最大連接數(shù)量即可

你可以得知連接池已經(jīng)打開多少連接:

from django.core.cache import get_cache
from django_redis import get_redis_connection

r = get_redis_connection("default")  # Use the name you have defined for Redis in settings.CACHES
connection_pool = r.connection_pool
print("Created connections so far: %d" % connection_pool._created_connections)

使用自己的連接池子類

有時(shí)你想使用自己的連接池子類. django-redis 提供了?CONNECTION_POOL_CLASS?來配置連接池子類

myproj/mypool.py

from redis.connection import ConnectionPool

class MyOwnPool(ConnectionPool):
    # Just doing nothing, only for example purpose
    pass
緩存的用法 單個(gè)view緩存

django.views.decorators.cache.cache_page裝飾器用于對視圖的輸出進(jìn)行緩存

from django.views.decorators.cache import cache_page

@cache_page(60 * 2)
def index(request):
    # return HttpResponse("sunck is a good man")
    return HttpResponse("sunck is a nice man")
參數(shù):
timeout : 有效時(shí)長  # we"ve written it as 60 * 15 for the purpose of readability
cache: 緩存到哪一個(gè)庫中;很少使用;針對于系統(tǒng)配置了多個(gè)緩存
       如: @cache_page(timeout=60, cache="filecache")
key_prefix: 前綴      
模板片段緩存

cache標(biāo)簽: 參數(shù)

緩存時(shí)間,以秒為單位

給緩存片段起名字

{#{% load static from staticfiles %}#}
{% load static %}
{% load cache %}



    
    主頁

{#    #}
    


    

sunck is a nice man

{% cache 120 sunck %}

nice man

{% endcache %}
原生cache
from django.core.cache import cache
查看所有緩存的key: cache.keys("*")
設(shè)置:cache.set(鍵, 值, 有效時(shí)間)
獲?。篶ache.get(鍵)
刪除:cache.delete(鍵)
清空:cache.clear()
>>> cache.set_many({"a": 1, "b": 2, "c": 3})
>>> cache.getmany(["a","b","c"])
{"a": 1, "b": 2, "c": 3}
cache.delete_pattern("foo_*") # 全局通配符

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/62038.html

相關(guān)文章

  • 8-django——發(fā)送郵件和緩存

    摘要:緩存數(shù)據(jù)就是為了保存那些需要很多計(jì)算資源的結(jié)果,這樣的話就不必在下次重復(fù)消耗計(jì)算資源。自帶了一個(gè)健壯的緩存系統(tǒng)來保存動(dòng)態(tài)頁面,避免每次請求都重新計(jì)算。默認(rèn)不會(huì)關(guān)閉連接盡可能重用連接。 發(fā)送郵件 概述:Django中內(nèi)置了郵件發(fā)送功能,發(fā)送郵件需要使用SMTP服務(wù),常用的免費(fèi)服務(wù)器有:163、126、QQ 注冊并登陸163郵箱 打開POP3/SMTP服務(wù)與IMAP/SMTP服務(wù) 重置授...

    sumory 評論0 收藏0
  • (轉(zhuǎn))django 設(shè)置 數(shù)據(jù)庫緩存

    摘要:官方緩存系統(tǒng)介紹配置方式及內(nèi)部實(shí)現(xiàn)機(jī)制中大體分為三種,即針對全站的緩存配置針對視圖的緩存配置針對數(shù)據(jù)的緩存配置。本站采用數(shù)據(jù)庫全站緩存。每個(gè)頁面應(yīng)該被緩存的秒數(shù)重啟就可以體驗(yàn)緩存了。 最近博客增加了許多新功能,訪問速度有所下降,在國內(nèi)某搜索引擎上查找的時(shí)候看到了這篇文字,簡單明了,所以轉(zhuǎn)發(fā)過來,雖不是原創(chuàng)但是希望能夠幫助更多的朋友。 Django 官方緩存系統(tǒng)介紹: https://d...

    Flands 評論0 收藏0
  • 3-Django視圖

    摘要:概述作用視圖接收請求并返回響應(yīng)方法就是在視圖里使用函數(shù)處理請求。 概述 作用:視圖接收WEB請求并返回WEB響應(yīng)方法:1. FBV(function base views)?就是在視圖里使用函數(shù)處理請求。 ? 2. CBV(class base views)?就是在視圖里使用類處理請求。 響應(yīng): 可以是一個(gè)HTML頁面,一個(gè)重定向,一個(gè)404錯(cuò)誤、一個(gè)...

    asoren 評論0 收藏0
  • 2016Django中使用memcached作為緩存

    有了memcached做緩存,django的速度就像飛起來了 安裝 sudo apt-get install memcached pip install python-memcached sudo apt-get install python-dev sudo apt-get install libmemcached-dev pip install pylibmc 配置 CACHES = { ...

    617035918 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<