Creat taisce DjangoLink to this heading

Is é trádáil bhunúsach i láithreáin ghréasáin dinimiciúla, go maith, tá siad dinimiciúil. Gach uair a iarrann úsáideoir leathanach, déanann an freastalaí gréasáin gach cineál ríomhanna - ó cheisteanna bunachar sonraí go rindreáil teimpléad go loighic ghnó - chun an leathanach a fheiceann cuairteoir do shuíomh a chruthú. Tá sé seo i bhfad níos costasaí, ó pheirspictíocht las-phróiseála, ná do shocrú caighdeánach freastalaí freastalaí léamh comhad lasmuigh den chóras comhaid.

Maidir le formhór na bhfeidhmchlár gréasáin, ní mór é an lasbhreas seo. Ní washingtonpost.com` nó slashdot.org iad formhór na bhfeidhmchlár gréasáin; is suíomhanna beaga go meánmhéide iad le trácht mar sin. Ach i gcás suíomhanna meánmhéide agus ardthráchta, tá sé riachtanach an oiread lasairde agus is féidir a ghearradh.

Sin an áit a dtagann caching isteach.

Is é rud éigin a thaisceadh ná toradh ríofa daor a shábháil ionas nach mbeidh ort an ríomh a dhéanamh an chéad uair eile. Seo roinnt pseudocode a mhíníonn conas a oibreodh sé seo le haghaidh leathanach gréasáin a ghintear go dinimiciúil:

Text
given a URL, try finding that page in the cache
if the page is in the cache:
    return the cached page
else:
    generate the page
    save the generated page in the cache (for next time)
    return the generated page

Tagann Django le córas taisce láidir a ligeann duit leathanaigh dhinimiciúla a shábháil ionas nach gá iad a ríomh do gach iarratas. Ar mhaithe le háisiúlacht, cuireann Django leibhéil éagsúla gráinneachta taisce ar fáil: Is féidir leat aschur radhairc ar leith a thaisceadh, ní féidir leat ach na píosaí atá deacair a tháirgeadh a thaisceadh, nó is féidir leat do shuíomh iomlán a thaisceadh.

Oibríonn Django go maith freisin le taiscí “íossrutha”, mar shampla `Squid`< http://www.squid-cache.org/> _ agus taiscí brabhsálaí-bhunaithe. Is iad seo na cineálacha taiscí nach ndéanann tú rialú go díreach ach ar féidir leat leideanna a sholáthar dóibh (trí cheanntásca HTTP) faoi na codanna de do shuíomh ba chóir a stóráil, agus conas.

An taisce a chur ar bunLink to this heading

Éilíonn an córas taisce méid beag socraithe. Eadhon, caithfidh tú a insint dó cá háit ar chóir go gcónaíonn do shonraí taiscéadaithe - cibé acu i mbunachar sonraí, ar an gcóras comhaid nó go díreach i gcuimhne. Is cinneadh tábhachtach é seo a théann i bhfeidhm ar fheidhmíocht do taisce; sea, tá roinnt cineálacha taisce níos gasta ná a chéile.

Téann do rogha taisce sa socrú:setting: CACHES i do chomhad socruithe. Seo míniú ar na luachanna go léir atá ar fáil le haghaidh: socrú: CACHES.

MemcachedLink to this heading

Is freastalaí taisce go hiomlán bunaithe ar chuimhne é Memcached__, a forbraíodh ar dtús chun ualaí arda a láimhseáil ag LiveJournal.com agus foinse oscailte ina dhiaidh sin ag Danga Interactive. Úsáideann suíomhanna mar Facebook agus Wikipedia é chun rochtain ar bhunachar sonraí a laghdú agus feidhmíocht an láithreáin a mhéadú go mór.

Ritheann Memcached mar démon agus leithdháiltear méid sonraithe RAM air. Níl le déanamh aige ach comhéadan tapa a sholáthar chun sonraí sa taisce a chur leis, a aisghabháil agus a scriosadh. Stóráiltear na sonraí go léir go díreach i gcuimhne, mar sin níl aon lasbhunachar sonraí nó úsáid chórais chomhad ann.

Tar éis duit Memcached féin a shuiteáil, beidh ort ceangailt Memcached a shuiteáil. Tá roinnt ceangail Python Memcached ar fáil; is iad an dá cheann a thacaíonn Django: pypi: pylibmc agus:pypi: pymemcache.

Chun Memcached a úsáid le Django:

  • Socraigh: Socrú: BACKEND `go ``Django.core.cache.backends.memcached.pymemcachecache`<CACHES-BACKEND> nó django.core.cache.backends.memcached.pylibmccache (ag brath ar an gceangailt memcached roghnaithe agat)

  • SOC:SET:SETING: LOCATION <CACHES-LOCATION>`go luachanna ``ip: port `, áit is é ip` seoladh IP an daemon Memcached agus port an calafort ar a bhfuil Memcached ag rith, nó go luach unix:path, áit is é path an cosán chuig comhad soicéad Memcached Unix.

Sa sampla seo, tá Memcached ag rith ar chalafort localhost (127.0.0.1) 11211, ag baint úsáide as an cheangailteach ``pymemcache`:

Code
CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.memcached.PyMemcacheCache",
        "LOCATION": "127.0.0.1:11211",
    }
}

Sa sampla seo, tá Memcached ar fáil trí chomhad soicéad áitiúil Unix: file: /tmp/memcached.sock ag baint úsáide as an ceangailt pymemcache:

Code
CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.memcached.PyMemcacheCache",
        "LOCATION": "unix:/tmp/memcached.sock",
    }
}

Gné den scoth amháin de Memcached is ea a chumas taisce a roinnt thar fhreastalaithe iolracha. Ciallaíonn sé seo gur féidir leat daemons Memcached a reáchtáil ar iliomad meaisíní, agus déileálfaidh an clár leis an ngrúpa meaisíní mar taisce* aonair*, gan gá luachanna taisce a dhúbailt ar gach meaisín. Ch <CACHES-LOCATION>un leas a bhaint as an ngné seo, cuir gach seoladh freastalaí san áireamh in:socrú: `LOCATION `, mar shreang teoranta leath-cholún nó camóg, nó mar liosta.

Sa sampla seo, roinntear an taisce thar chásanna Memcached atá ag rith ar sheoladh IP 172.19.26.240 agus 172.19.26.242, araon ar chalafort 11211:

Code
CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.memcached.PyMemcacheCache",
        "LOCATION": [
            "172.19.26.240:11211",
            "172.19.26.242:11211",
        ],
    }
}

Sa sampla seo a leanas, roinntear an taisce thar chásanna Memcached atá ag rith ar na seoltaí IP 172.19.26.240 (calafort 11211), 172.19.26.242 (calafort 11212), agus 172.19.26.244 (calafort 11213):

Code
CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.memcached.PyMemcacheCache",
        "LOCATION": [
            "172.19.26.240:11211",
            "172.19.26.242:11212",
            "172.19.26.244:11213",
        ],
    }
}

<CACHES-OPTIONS>De réir réamhshocraithe, socraíonn an cúltaca PymemCacheCache` na roghanna seo a leanas (is féidir leat iad a shárú i d:setting: `OPTIONS `):

Code
"OPTIONS": {
    "allow_unicode_keys": True,
    "default_noreply": False,
    "serde": pymemcache.serde.pickle_serde,
}

Pointe deiridh faoi Memcached ná go bhfuil míbhuntáiste ag taiscáil cuimhne bunaithe: toisc go stóráiltear na sonraí taisceáilte i gcuimhne, caillfear na sonraí má thimpíonn do fhreastalaí. Is léir nach bhfuil cuimhne beartaithe le haghaidh stórála sonraí buan, mar sin ná bí ag brath ar chaching cuimhne mar an t-aon stóráil sonraí atá agat. Gan amhras, níor cheart aon cheann de na cúltaca caching Django a úsáid le haghaidh stórála buan - tá sé beartaithe go léir a bheith ina réitigh le haghaidh taiscéála, ní stóráil - ach cuirimid é seo in iúl anseo toisc go bhfuil caching bunaithe ar chuimhne go háirithe sealadach.

RedisLink to this heading

Is bunachar sonraí in-chuimhne é Redis__ is féidir a úsáid le haghaidh taiscála. Chun tús a chur beidh freastalaí Redis ag teastáil uait ag rith go háitiúil nó ar mheaisín iargúlta.

Tar éis duit an freastalaí Redis a bhunú, beidh ort ceangail Python a shuiteáil do Redis. :pypi: Is é `redis-py <redis>`an ceangailt a thacaíonn Django go dúchasach. <hiredis>Moltar an pacáiste: pypi: `hiredis-py `a shuiteáil freisin.

Chun Redis a úsáid mar do chúltaca taisce le Django:

  • <CACHES-BACKEND>Socraigh: socrú: BACKEND `go ``Django.Core.Cache.Backends.Redis.RedisCache `.

  • Set LOCATION to the URL pointing to your Redis instance, using the appropriate scheme. See the redis-py docs for details on the available schemes.

Mar shampla, má tá Redis ag rith ar chalafort localhost (127.0.0.1) 6379:

Code
CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.redis.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379",
    }
}

Is minic a chosnaítear freastalaithe Redis le fíordheimhniú. D'fhonn ainm úsáideora agus pasfhocal a sholáthar, cuir iad sa SUÍOMH` mar aon leis an URL:

Code
CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.redis.RedisCache",
        "LOCATION": "redis://username:password@127.0.0.1:6379",
    }
}

Má tá iolracha freastalaithe Redis curtha ar bun agat sa mhodh macasamhail, is féidir leat na freastalaithe a shonrú mar shreang teoranta leath-cholún nó camóg, nó mar liosta. Agus freastalaithe iolracha á úsáid agat, déantar oibríochtaí scríofa ar an gcéad fhreastalaí (ceannaire) Déantar oibríochtaí léite ar na freastalaithe eile (macasamhail) a roghnaítear go randamach:

Code
CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.redis.RedisCache",
        "LOCATION": [
            "redis://127.0.0.1:6379",  # leader
            "redis://127.0.0.1:6378",  # read-replica 1
            "redis://127.0.0.1:6377",  # read-replica 2
        ],
    }
}

Cacháil bunachar sonraíLink to this heading

Is féidir le Django a chuid sonraí taiscéadaithe a stóráil i do bhunachar sonraí. Oibríonn sé seo is fearr má tá freastalaí bunachar sonraí tapa, innéacsaithe go maith agat.

Chun tábla bunachar sonraí a úsáid mar do chúltaca taisce:

  • <CACHES-BACKEND>Socraigh: socrú: BACKEND `go ``Django.core.cache.backends.db.databaseCache `

  • Socraigh: socrú: LOCATION <CACHES-LOCATION>`go ``tablename`, ainm an tábla bunachar sonraí. Is féidir leis an ainm seo a bheith cibé rud is mian leat, fad is ainm tábla bailí é nach bhfuil á úsáid cheana féin i do bhunachar sonraí.

Sa sampla seo, is é my_cache_table` ainm an tábla taisce:

Code
CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.db.DatabaseCache",
        "LOCATION": "my_cache_table",
    }
}

Murab ionann agus cúltaca taisce eile, ní thacaíonn taisce an bhunachar sonraí le cur isteach in éag go huathoibríoch ag leibhéal an bhunachar sonraí. Ina áit sin, déantar iontrálacha taisce in éag a scriosadh gach uair a thugtar add () ``, `set (), nó ``touch () ``.

An tábla taisce a chruthúLink to this heading

Sula n-úsáidtear taisce an bunachar sonraí, ní mór duit an tábla taisce a chruthú leis an ordú seo:

Shell
python manage.py createcachetable

Cruthaíonn sé seo tábla i do bhunachar sonraí atá san fhormáid cheart a bhfuil súil ag córas taisce bunachar sonraí Django. <CACHES-LOCATION>Tógtar ainm an tábla ó:socrú: `SUÍOMH `.

Má tá iolracha bunachar sonraí á úsáid agat, cruthaíonn: djadmin: createcachetable tábla amháin do gach taisce.

Má tá bunachar sonraí iolracha á úsáid agat, breathnaíonn: djadmin: createcachetable modh `allow_migration () ``ar do ródairí bunachar sonraí (féach thíos).

Mar shampla: Djadmin: migrate, :djadmin: ní dhéanfaidh createcachetable teagmháil le tábla atá ann cheana. Ní chruthóidh sé ach táblaí ar iarraidh.

Chun an SQL a reáchtálfaí a phriontáil, seachas é a reáchtáil, bain úsáid as an roghna:option: createcachetable --dry-run.

Bunachair sonraí iliomLink to this heading

Má úsáideann tú táscáil bunachar sonraí le bunachair sonraí iolracha, beidh ort treoracha ródaithe a chur ar bun do thábla taisce bunachar sonraí freisin. Chun críocha ródaithe, tá tábla taisce an bhunachar sonraí le feiceáil mar mhúnla darb ainm cacheentry`, i bhfeidhmchlár darb ainm ``django_cache. Ní bheidh an tsamhail seo le feiceáil i taisce na samhlacha, ach is féidir sonraí an tsamhail a úsáid chun críocha ródaithe.

Mar shampla, threoródh an ródaire seo a leanas gach oibríocht léite taisce chuig cache_replica, agus scríobhfadh gach oibríocht chuig cache_primary`. Ní dhéanfar an tábla taisce a shioncronú ach ar cache_primary`:

Code
class CacheRouter:
    """A router to control all database cache operations"""

    def db_for_read(self, model, **hints):
        "All cache read operations go to the replica"
        if model._meta.app_label == "django_cache":
            return "cache_replica"
        return None

    def db_for_write(self, model, **hints):
        "All cache write operations go to primary"
        if model._meta.app_label == "django_cache":
            return "cache_primary"
        return None

    def allow_migrate(self, db, app_label, model_name=None, **hints):
        "Only install the cache model on primary"
        if app_label == "django_cache":
            return db == "cache_primary"
        return None

Mura sonraíonn tú treoracha ródaithe don tsamhail taisce bunachar sonraí, úsáidfidh an cúltaca taisce an bunachar sonraí réamhshocraithe.

Agus mura n-úsáideann tú cúltaca taisce an bhunachar sonraí, ní gá duit a bheith buartha faoi threoracha ródaithe a sholáthar don tsamhail taisce bunachar sonraí.

Caching chórais comhaidLink to this heading

Déanann an cúltaca comhad-bhunaithe gach luach taisce a shraitheadh agus a stóráil mar chomhad ar leithligh. <CACHES-LOCATION>Chun an tacar cúltaca seo a úsáid: socrú: BACKEND `go ``<CACHES-BACKEND>"django.core.cache.backends.fileBasedCache"` agus:setting: LOCATION chuig eolaire oiriúnach. Mar shampla, chun sonraí taisceáilte a stóráil i /var/tmp/django_cache, bain úsáid as an socrú seo:

Code
CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.filebased.FileBasedCache",
        "LOCATION": "/var/tmp/django_cache",
    }
}

Má tá tú ar Windows, cuir an litir tiomána ag tús an chosáin, mar seo:

Code
CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.filebased.FileBasedCache",
        "LOCATION": "c:/foo/bar",
    }
}

Ba chóir go mbeadh an cosán eolaire iomlán - is é sin, ba chóir go dtosódh sé ag fréamh do chóras comhaid. Is cuma an gcuireann tú slash ag deireadh an shocraithe.

Déan cinnte go bhfuil an eolaire a luaitear ag an socrú seo ann agus go bhfuil sé inléite agus inscríofa, nó gur féidir le húsáideoir an chórais faoina ritheann do fhreastalaí gréasáin é a chruthú. Ag leanúint leis an sampla thuas, má ritheann do fhreastalaí mar an úsáideoir apache, déan cinnte go bhfuil an eolaire /var/tmp/django_cache ann agus go bhfuil sé inléite agus inscríofa ag an úsáideoir apache, nó gur féidir leis an úsáideoir apache é a chruthú.

Cacháil cuimhne áitiúilLink to this heading

Is é seo an taisce réamhshocraithe mura sonraítear ceann eile i do chomhad socruithe. Más mian leat na buntáistí luais a bhaineann le caching in-chuimhne ach nach bhfuil an cumas agat Memcached a reáchtáil, smaoinigh ar an gcúltaca taisce cuimhne áitiúil. Tá an taisce seo in aghaidh an phróisis (féach thíos) agus sábháilte ó snáithe. <CACHES-BACKEND>Chun é a úsáid, socraí:setting: BACKEND `go `"django.core.cache.backends.locmem.locmemcache"``. Mar shampla:

Code
CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.locmem.LocMemCache",
        "LOCATION": "unique-snowflake",
    }
}

Úsáidtear an cache:setting: LOCATION <CACHES-LOCATION>`chun siopaí cuimhne aonair a aithint. Mura bhfuil ach taisce ``locmem` amháin agat, is féidir leat an:setting: `LOCATION `a fhágáil<CACHES-LOCATION>; áfach, má tá níos mó ná taisce cuimhne áitiúil amháin agat, beidh ort ainm a shannadh do cheann acu ar a laghad d'fhonn iad a choinneáil ar leithligh.

Úsáideann an taisce straitéis díothaithe is lú a úsáidtear le déanaí (LRU).

Tabhair faoi deara go mbeidh a shampla taisce príobháideach féin ag gach próiseas, rud a chiallaíonn nach féidir aon chaching trasphróisis a dhéanamh. Ciallaíonn sé seo freisin nach bhfuil an taisce cuimhne áitiúil go háirithe éifeachtach ó chuimhne, mar sin is dócha nach rogha maith é do thimpeallachtaí táirgeachta. Tá sé go deas le haghaidh forbartha.

Caching dummy (le haghaidh forbartha)Link to this heading

Faoi dheireadh, tagann Django le taisce “dummy” nach ndéanann taisce i ndáiríre - ní chuireann sé ach an comhéadan taisce i bhfeidhm gan aon rud a dhéanamh.

Tá sé seo úsáideach má tá suíomh táirgeachta agat a úsáideann taiscáil tromshaothair in áiteanna éagsúla ach timpeallacht forbarta/tástála nach dteastaíonn uait taisce a dhéanamh agus nach dteastaíonn uait do chód a athrú go speisialta an dara ceann. <CACHES-BACKEND>Chun caching dummy a ghníomhachtú, socraí:setting: `BACKEND `mar sin:

Code
CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.dummy.DummyCache",
    }
}

Úsáid cúltaca taisce saincheapthaLink to this heading

Cé go gcuimsíonn Django tacaíocht do roinnt cúltaca taisce lasmuigh den bhosca, uaireanta b'fhéidir gur mhaith leat cúltaca taisce saincheaptha a úsáid. Chun cúltaca taisce seachtrach a úsáid le Django, bain úsáid as an gcosán allmhairithe Python mar an:setting: BACKEND `den socrú: `CACHES<CACHES-BACKEND>, mar shampla:

Code
CACHES = {
    "default": {
        "BACKEND": "path.to.backend",
    }
}

Má tá do chúlcheann féin á thógáil agat, is féidir leat na cúltaca caighdeánacha taisce a úsáid mar chur i bhfeidhm tagartha. Gheobhaidh tú an cód san eolaire: source: django/core/cache/backends/ foinse Django.

Nóta: Gan cúis an-láidir, mar óstach nach dtacaíonn leo, ba chóir duit cloí leis na cúltaca taisce atá san áireamh le Django. Rinneadh tástáil mhaith orthu agus tá siad doiciméadaithe go maith.

Argóintí taisceLink to this heading

Is féidir argóintí breise a thabhairt do gach cúltaca taisce chun iompar taisce a rialú. Cuirtear na hargóintí seo ar fáil mar eochracha breise sa socrú: socrú: CACHES. Is iad seo a leanas argóintí bailí:

  • TIMEOUT: The default timeout, in seconds, to use for the cache. This argument defaults to 300 seconds (5 minutes). You can set TIMEOUT to None so that, by default, cache keys never expire. A value of 0 causes keys to immediately expire (effectively "don't cache").

  • OPTIONS: Any options that should be passed to the cache backend. The list of valid options will vary with each backend, and cache backends backed by a third-party library will pass their options directly to the underlying cache library.

    Déanfaidh cúltaca taisce a chuireann a straitéis díothaithe féin i bhfeidhm (ie, na cúltaca locmem, córas comhad ``agus ``bunachar sonraí) onóir na roghanna seo a leanas:

    • MAX_ENTRIES: An líon uasta na n-iontrálacha a cheadaítear sa taisce sula scriostar seanluachanna. Tá an argóint seo réamhshocraithe go 300.

    • CULL_FREQUENCY: An codán na n-iontrálacha a dhíothaítear nuair a shroichtear MAX_ENTRIES. Is é an cóimheas iarbhír ná 1/CULL_FREQUENCY, mar sin socraigh CULL_FREQUENCY go 2 chun leath na n-iontrálacha a scriosadh nuair a shroichtear MAX_ENTRIES ``. Ba chóir go mbeadh an argóint seo ina shláimhir agus réamhshocraithe go ``3.

      Ciallaíonn luach 0 do CULL_FREQUENCY` go ndéanfar an taisce iomlán a dumpáil nuair a shroichfear MAX_ENTRIES. Ar roinnt cúltaca (``bunachar sonraí ``go háirithe) déanann sé seo go gcaithfeach* i bhfad níos gasta ar chostas níos mó caitheamh taisce.

    Cuireann cúltaca Memcached agus Redis ábhar: socrú: `OPTIONS <CACHES-OPTIONS>`mar argóintí eochairfhocal chuig tógálaí na gcliant, rud a cheadaíonn rialú níos airde ar iompar cliant. Mar shampla úsáid, féach thíos.

  • KEY_PREFIX: A string that will be automatically included (prepended by default) to all cache keys used by the Django server.

    Féach na:ref: `cáipéisíocht taiscéala <cache_key_prefixing>`le haghaidh tuilleadh faisnéise.

  • VERSION: The default version number for cache keys generated by the Django server.

    Féach na:ref: `cáipéisíocht taiscéala <cache_versioning>`le haghaidh tuilleadh faisnéise.

  • KEY_FUNCTION A string containing a dotted path to a function that defines how to compose a prefix, version and key into a final cache key.

    Féach na:ref: `cáipéisíocht taiscéala <cache_key_transformation>`le haghaidh tuilleadh faisnéise.

Sa sampla seo, tá cúltaca córas comhaid á chumrú le haon ama 60 soicind, agus cumas uasta 1000 mír:

Code
CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.filebased.FileBasedCache",
        "LOCATION": "/var/tmp/django_cache",
        "TIMEOUT": 60,
        "OPTIONS": {"MAX_ENTRIES": 1000},
    }
}

Seo cumraíocht shampla le haghaidh cúltaca bunaithe ar pylibmc a chumasaíonn an prótacal dénártha, fíordheimhniú SASL, agus an modh iompraíochta ketama:

Code
CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.memcached.PyLibMCCache",
        "LOCATION": "127.0.0.1:11211",
        "OPTIONS": {
            "binary": True,
            "username": "user",
            "password": "pass",
            "behaviors": {
                "ketama": True,
            },
        },
    }
}

Seo cumraíocht shamplach le haghaidh cúltaca bunaithe ar pymemcache a chuireann ar chumas comhdhlúthú cliant (a d'fhéadfadh feidhmíocht a fheabhsú trí chliaint a choinneáil ceangailte), déileálann sé le hearráidí memcache/líonra mar chailleann taisce, agus socraíonn an bratach TCP_NODELAY ar soicéad an nasc:

Code
CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.memcached.PyMemcacheCache",
        "LOCATION": "127.0.0.1:11211",
        "OPTIONS": {
            "no_delay": True,
            "ignore_exc": True,
            "max_pool_size": 4,
            "use_pooling": True,
        },
    }
}

Seo cumraíocht shampla le haghaidh cúltaca bunaithe ar redis a roghnaíonn bunachar sonraí `10 (de réir réamhshocraithe loingíonn Redis le 16 bhunachar sonraí loighciúla), agus a leagann saincheaptha rang linn nasc (Redis.connectionPool úsáidtear de réir réamhshocraithe):

Code
CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.redis.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379",
        "OPTIONS": {
            "db": "10",
            "pool_class": "redis.BlockingConnectionPool",
        },
    }
}

An taisce in aghaidh an láithreáinLink to this heading

Nuair a bheidh an taisce curtha ar bun, is é an bealach is simplí chun caching a úsáid ná do shuíomh iomlán a thaisceadh. Beidh ort ``django.middleware.cache.UpdateCacheMiddleware'` agus ``django.middleware.cache.fetchfromCacheMiddleware'` a chur le do shuíomh: MIDDLEWARE, mar atá sa sampla seo:

Code
MIDDLEWARE = [
    "django.middleware.cache.UpdateCacheMiddleware",
    "django.middleware.common.CommonMiddleware",
    "django.middleware.cache.FetchFromCacheMiddleware",
]

Ansin, cuir na socruithe riachtanacha seo a leanas le do chomhad socruithe Django:

  • CACHE_MIDDLEWARE_ALIAS -- The cache alias to use for storage.

  • CACHE_MIDDLEWARE_SECONDS -- The integer number of seconds each page should be cached.

  • CACHE_MIDDLEWARE_KEY_PREFIX -- If the cache is shared across multiple sites using the same Django installation, set this to the name of the site, or some other string that is unique to this Django instance, to prevent key collisions. Use an empty string if you don't care.

Tugann Fetchfromcachemiddleware freagraí GET agus HEAD le stádas 200, nuair a cheadaíonn na ceannteidil iarratais agus freagartha. Meastar gur leathanaigh uathúla iad freagraí ar iarratais ar an URL céanna le paraiméadair cheisteanna éagsúla agus cuirtear iad a chosc ar leithligh Tá an middleware seo ag súil go bhfreagraítear iarratas HEAD leis na ceannteidil freagartha céanna leis an iarratas GET comhfhreagrach; sa chás sin féadfaidh sé freagra GET a chosaithe ar iarratas HEAD a thabhairt ar ais.

<downstream-caches>Ina theannta sin, socraíonn UpdateCacheMiddleware cúpla ceannteideal go huathoibríoch i ngach:class: ~django.http.httpResponse a théann i bhfeidh:ref: `caches downstream `:

  • Socraíonn an ceannteideal Expires go dtí an dáta/am reatha móide an sainmhínithe:setting: CACHE_MIDDLEWARE_SECONDS.

  • Socraíonn sé an ceanntásc Cache-Control chun aoise uasta a thabhairt don leathanach -- arís, ón socrú:setting: CACHE_MIDDLEWARE_SECONDS.

Féach: doc: /topics/http/middleware le haghaidh tuilleadh ar middleware.

Má shocraíonn amharc a chuid ama éaga taisce féin (ie tá rannán max-aos aige ina cheanntásc Cache-Control) ansin déanfar an leathanach a stóráil go dtí an t-am éaga, seach:setting: CACHE_MIDDLEWARE_SECONDS. Ag baint úsáide as na maisitheoirí i django.views.decorators.cache` is féidir leat am éaga amharc a shocrú go héasca (ag baint úsáide as:func: ~django.views.decorators.cache.cache_control decorator) nó díchumasú a chaching le haghaidh amharc (ag baint úsáide as an: func: ~django.decorators.cache.neverator _cache). Féach an chuid `ceannteidil eile a úsáid `__ le haghaidh tuilleadh eolais faoi na maisitheoirí seo.

<language code>Más rud é: Socrú: USE_I18N socraithe go True ansin beidh ainm an ghníomhaí:term: language `san eochair taisce a ghintear san eochair taisce ginte -- féach freis:ref: `how django-discovers-language-preference). Ligeann sé seo duit suíomhanna ilteangacha a thaisceadh go héasca gan an eochair taisce a chruthú tú féin.

Cuimsíonn eochracha taisce an: ref: crios ama reatha `nuai:setting: `USE <default-current-time-zone>_TZ socraithe go True.

An taisce in aghaidh an amharcLink to this heading

django.views.decorators.cache.cache_page(timeout, *, cache=None, key_prefix=None)Link to this definition

Bealach níos gráinneach chun an creat taiscéála a úsáid ná aschur tuairimí aonair a chaitheamh. Sainmhíníonn django.views.decorators.cache maisitheoir cache_page a thaisceoidh freagra an amharc duit go huathoibríoch:

Code
from django.views.decorators.cache import cache_page


@cache_page(60 * 15)
def my_view(request): ...

Tógann cache_page argóint amháin: an t-am taisce, i soicindí. Sa sampla thuas, déanfar toradh an radharc my_view () `a stóráil ar feadh 15 nóiméad. (Tabhair faoi deara go bhfuil scríofa againn mar `60* 15 chun críche inléiteachta. Meastófar 60* 15 go 900` - is é sin, 15 nóiméad iolraithe le 60 soicind in aghaidh an nóiméid.)

Tá tosaíocht ag an am taisce atá leagtha síos ag cache_page` thar an treoir max-aois ``ón gceannteideal ``Cache-Control.

Cuirtear an taisce in aghaidh an amharc, cosúil leis an taisce in aghaidh an láithreáin, as an URL. Má thaispeánann URLanna iolracha ar an radharc céanna, déanfar gach URL a stóráil ar leithligh. Ag leanúint leis an sampla my_view, má tá cuma seo ar do URLConf:

Code
urlpatterns = [
    path("foo/<int:code>/", my_view),
]

ansin cuirfear iarratais ar /foo/1/ agus /foo/23/ a chosc ar leithligh, mar a d'fhéadfá a bheith ag súil leis. Ach nuair a iarrtar URL áirithe (m.sh., /foo/23/), úsáidfidh iarratais ina dhiaidh sin chuig an URL sin an taisce.

Is féidir le cache_page argóint eochairfhocal roghnach a ghlacadh freisin, cache`, a threoraíonn don mhaisitheoir taisce ar leith a úsáid (ó do shuíomh: SETING: `CACHES) agus torthaí amharc á chaitheamh agat. De réir réamhshocraithe, úsáidfear an taisce default, ach is féidir leat aon taisce a theastaíonn uait a shonrú:

Code
@cache_page(60 * 15, cache="special_cache")
def my_view(request): ...

Is féidir leat an réimír taisce a shárú freisin ar bhonn aghaidh amharc. Glacann cache_page argóint eochairfhocal roghnach, key_prefix, a oibríonn ar an mbealach céanna leis an:setting: CACHE_MIDDLEWARE_KEY_PREFIX socrú don middleware. Is féidir é a úsáid mar seo:

Code
@cache_page(60 * 15, key_prefix="site1")
def my_view(request): ...

Is féidir na hargóintí key_prefix agus cache a shonrú le chéile. <CACHES-KEY_PREFIX>Déanfar an argóint key_prefix agus an:setting: KEY_PREFIX a shonraítear fao:setting: CACHES a chomhcheangal.

<downstream-caches>Ina theannta sin, socraíonn cache_page ceannteidil Cache-Control agus Expires go huathoibríoch sa fhreagra a théann i bhfeidh:ref: `caches downstream `.

Taisce in aghaidh an amharc a shonrú sa URLConfLink to this heading

Tá sé crua-chódaithe ag na samplaí sa chuid roimhe seo go bhfuil an dearcadh a stóráil, toisc go n-athraíonn cache_page an fheidhm my_view atá i bhfeidhm. Déanann an cur chuige seo do thuairim leis an gcóras taisce, nach bhfuil oiriúnach ar chúiseanna éagsúla. Mar shampla, b'fhéidir gur mhaith leat na feidhmeanna amharc a athúsáid ar shuíomh eile gan taisce, nó b'fhéidir gur mhaith leat na tuairimí a dháileadh ar dhaoine a d'fhéadfadh a bheith ag iarraidh iad a úsáid gan iad a chosc. Is é an réiteach ar na fadhbanna seo ná an taisce in aghaidh an amharc a shonrú sa URLConf seachas in aice leis na feidhmeanna amharc féin.

Is féidir leat é sin a dhéanamh tríd an bhfeidhm amharc a fhilleadh le cache_page` nuair a thagann tú tagairt dó sa URLConf. Seo an sean-URLConf ó níos luaithe:

Code
urlpatterns = [
    path("foo/<int:code>/", my_view),
]

Seo an rud céanna, le my_view fillte i cache_page:

Code
from django.views.decorators.cache import cache_page

urlpatterns = [
    path("foo/<int:code>/", cache_page(60 * 15)(my_view)),
]

Caching bhrúin teimpléadLink to this heading

Má tá tú tar éis níos mó smachta fós, is féidir leat blúirí teimpléad a thaiscáil ag baint úsáide as an gclib teimpléad cache`. Chun rochtain a thabhairt do do theimpléad ar an gclib seo, cuir ``{% load cache%} in aice le barr do theimpléad.

Cuireann an chlib teimpléid {% cache%} ábhar an bhloc a chosc ar feadh méid áirithe ama. Tógann sé dhá argóint ar a laghad: an t-am taisce, i soicindí, agus an t-ainm chun an blúire taisce a thabhairt. Déantar an blúire a stóráil go deo má tá an t-am amach ``None ``. Glacfar an t-ainm mar atá, ná húsáid athróg. Mar shampla:

Django template
{% load cache %}
{% cache 500 sidebar %}
    .. sidebar ..
{% endcache %}

Uaireanta b'fhéidir gur mhaith leat cóipeanna iolracha de bhrúin a thaisceadh ag brath ar roinnt sonraí dinimiciúla atá le feiceáil taobh Mar shampla, b'fhéidir gur mhaith leat cóip taiscéadaithe ar leithligh den taobh barra a úsáideadh sa sampla roimhe seo do gach úsáideoir de do shuíomh. Déan é seo trí argóint bhreise amháin nó níos mó, a d'fhéadfadh a bheith ina athróga le scagairí nó gan scagairí, a chur chuig an gclib teimpléid ``{% cache%} `chun an blúir taisce a aithint go uathúil:

Django template
{% load cache %}
{% cache 500 sidebar request.user.username %}
    .. sidebar for logged-in user ..
{% endcache %}

<i18n-cache-key>Má tá: SETTING: USE_I18N socraithe go True, beidh taisce meán-earraí in aghaidh an láithreáin: ref: meas a thabhairt don teanga ghníomhach. <template-translation-vars>Maidir leis an gclib teimpléad cache d'fhéadfá ceann de na hathróga:ref: `aistriúcháin-shonracha `atá ar fáil i dteimpléid a úsáid chun an toradh céanna a bhaint amach:

Django template
{% load i18n %}
{% load cache %}

{% get_current_language as LANGUAGE_CODE %}

{% cache 600 welcome LANGUAGE_CODE %}
    {% translate "Welcome to example.com" %}
{% endcache %}

Is féidir leis an t-am taisce a bheith ina athróg teimpléad, chomh fada agus a réitíonn an t-athróg teimpléad ar luach slámhshláir. Mar shampla, má tá an t-athróg teimpléad my_timeout socraithe go luach 600, ansin tá an dá shampla seo a leanas coibhéiseach:

Django template
{% cache 600 sidebar %} ... {% endcache %}
{% cache my_timeout sidebar %} ... {% endcache %}

Tá an ghné seo úsáideach chun athdhéanamh i dteimpléid a sheachaint. Is féidir leat an t-am a shocrú in athróg, in aon áit amháin, agus an luach sin a athúsáid.

De réir réamhshocraithe, déanfaidh an clib taisce iarracht an taisce ar a dtugtar “template_fragments” a úsáid. Mura bhfuil taisce den sórt sin ann, tiocfaidh sé ar ais chun an taisce réamhshocraithe a úsáid. Féadfaidh tú cúltaca taisce malartach a roghnú le húsáid leis an argóint eochairfhocal ``úsáid ``, nach mór gurb é an argóint deireanach don chlib.

Django template
{% cache 300 local-thing ...  using="localcache" %}

Meastar gur earráid é ainm taisce nach bhfuil cumraithe a shonrú.

django.core.cache.utils.make_template_fragment_key(fragment_name, vary_on=None)Link to this definition

Más mian leat an eochair taisce a úsáidtear le haghaidh blúire taisceáilte a fháil, is féidir leat make_template_fragment_key a úsáid. Tá fragment_name mar an gcéanna leis an dara argóint leis an gclib teimpléad cache; vary_on` liosta de na hargóintí breise go léir a chuirtear chuig an gclib. Is féidir leis an bhfeidhm seo a bheith úsáideach chun mír taisceáilte a neamhbhailí nó a fhorscríobh, mar shampla:

Python console
>>> from django.core.cache import cache
>>> from django.core.cache.utils import make_template_fragment_key
# cache key for {% cache 500 sidebar username %}
>>> key = make_template_fragment_key("sidebar", [username])
>>> cache.delete(key)  # invalidates cached template fragment
True

An API taisce leibhéal ísealLink to this heading

Uaireanta, ní ghnóthaíonn sé go mór duit a chaitheamh ar leathanach iomlán rindreáilte agus bíonn sé, i ndáiríre, ró-dhochaoithiúil.

B'fhéidir, mar shampla, tá radharc ar do shuíomh ag brath a thorthaí ar roinnt ceisteanna daor, a n-athraíonn a dtorthaí ag eatraimh éagsúla. Sa chás seo, ní bheadh sé oiriúnach an taisce leathanaigh lán-leathanaigh a thairgeann na straitéisí taisce in aghaidh an láithreáin nó in aghaidh an amharc a úsáid, toisc nach mbeadh tú ag iarraidh an toradh iomlán a thaisceadh (ós rud é go n-athraíonn cuid de na sonraí go minic), ach ba mhaith leat fós na torthaí a athraíonn.

For cases like this, Django exposes a low-level cache API. You can use this API to store objects in the cache with any level of granularity you like. You can cache any Python object that can be pickled safely: strings, dictionaries, lists of model objects, and so forth. (Most common Python objects can be pickled; refer to the Python documentation for more information about pickling.)

Rochtain a fháil ar an taisceLink to this heading

django.core.cache.cachesLink to this definition

Is féidir leat rochtain a fháil ar na táscáin atá cumraithe sa socrú:: CACHES trí réad cosúil le dict: django.core.cache.caches. Tabharfaidh iarratais arís agus arís eile ar an alias céanna sa snáithe céanna ar ais an réad céanna.

Python console
>>> from django.core.cache import caches
>>> cache1 = caches["myalias"]
>>> cache2 = caches["myalias"]
>>> cache1 is cache2
True

Mura bhfuil an eochair ainmnithe ann, ardófar InvalidCacheBackendError.

Chun sábháilteacht snáithe a sholáthar, cuirfear sampla difriúil den chúltaca taisce ar ais do gach snáithe.

django.core.cache.cacheLink to this definition

Mar aicearra, tá an taisce réamhshocraithe ar fáil mar django.core.cache.cache:

Python console
>>> from django.core.cache import cache

Tá an réad seo comhionann le ``caches ['réamhshocraithe'] ``.

Úsáid bunúsachLink to this heading

Is é an comhéadan bunúsach:

cache.set(key, value, timeout=DEFAULT_TIMEOUT, version=None)Link to this definition
Python console
>>> cache.set("my_key", "hello, world!", 30)
cache.get(key, default=None, version=None)Link to this definition
Python console
>>> cache.get("my_key")
'hello, world!'

Ba chóir go mbeadh eochair ina str`, agus is féidir luach a bheith ina aon rud Python inpictilte.

Tá an argóint timeout roghnach agus réamhshocraíonn sé ar an argóint timeout den chúltaca cuí sa socrúit:setting: CACHES (mínithe thuas). Is é líon na soicind ba chóir an luach a stóráil sa taisce. Ag dul isteach None le haghaidh timeout, beidh an luach a thaisceadh go deo. Ní dhéanfaidh timeout de 0 a thaisceadh an luach.

Mura bhfuil an réad ann sa taisce, filleann cache.get () ````None:

Python console
>>> # Wait 30 seconds for 'my_key' to expire...
>>> cache.get("my_key")
None

Más gá duit a chinneadh an bhfuil an réad sa taisce agus go bhfuil luach litriúil “None” stóráilte agat, bain úsáid as réad sentinel mar réamhshocraithe:

Python console
>>> sentinel = object()
>>> cache.get("my_key", sentinel) is sentinel
False
>>> # Wait 30 seconds for 'my_key' to expire...
>>> cache.get("my_key", sentinel) is sentinel
True

Is féidir le cache.get () ``argóint ``default a ghlacadh. Sonraíonn sé seo cén luach atá le filleadh mura bhfuil an réad ann sa taisce:

Python console
>>> cache.get("my_key", "has expired")
'has expired'
cache.add(key, value, timeout=DEFAULT_TIMEOUT, version=None)Link to this definition

Chun eochair a chur leis ach amháin mura bhfuil sé ann cheana féin, bain úsáid as an modh ``add () ``. Tógann sé na paraiméadair chéanna le ``set () ``, ach ní dhéanfaidh sé iarracht an taisce a nuashonrú má tá an eochair a shonraítear i láthair cheana féin:

Python console
>>> cache.set("add_key", "Initial value")
>>> cache.add("add_key", "New value")
>>> cache.get("add_key")
'Initial value'

Más gá duit fios a bheith agat an stóráil add () ``luach sa taisce, is féidir leat an luach tuairisceáin a sheiceáil. Tabharfaidh ar ais ``True má stóráilíodh an luach, False ar shlí eile.

cache.get_or_set(key, default, timeout=DEFAULT_TIMEOUT, version=None)Link to this definition

Más mian leat luach eochair a fháil nó luach a shocrú mura bhfuil an eochair sa taisce, tá an modh ``get_or_set () `ann. Tógann sé na paraiméadair chéanna le ``get () ``ach socraítear an réamhshocrú mar an luach taisce nua don eochair sin, seachas a thabhairt ar ais:

Python console
>>> cache.get("my_new_key")  # returns None
>>> cache.get_or_set("my_new_key", "my new value", 100)
'my new value'

Is féidir leat aon ghlaoch a chur ar aghaidh mar luach*réamhshocraithe*:

Python console
>>> import datetime
>>> cache.get_or_set("some-timestamp-key", datetime.datetime.now)
datetime.datetime(2014, 12, 11, 0, 15, 49, 457920)
cache.get_many(keys, version=None)Link to this definition

Tá comhéadan ``get_many () ``ann freisin nach mbuaileann an taisce ach uair amháin. Tugann ``get_many () ``foclóir ar ais leis na heochracha go léir a d'iarr tú orthu atá ann i ndáiríre sa taisce (agus níor éag):

Python console
>>> cache.set("a", 1)
>>> cache.set("b", 2)
>>> cache.set("c", 3)
>>> cache.get_many(["a", "b", "c"])
{'a': 1, 'b': 2, 'c': 3}
cache.set_many(dict, timeout)Link to this definition

Chun luachanna iolracha a shocrú níos éifeachtaí, bain úsáid as ``set_many () ``chun foclóir péirí eochairluacha a rith:

Python console
>>> cache.set_many({"a": 1, "b": 2, "c": 3})
>>> cache.get_many(["a", "b", "c"])
{'a': 1, 'b': 2, 'c': 3}

Cosúil le cache.set () ``, glacann ``set_many () paraiméadar roghnach timeout.

Ar chúltaca tacaithe (memcached), filleann ``set_many () ``liosta eochracha ar theip orthu a chur isteach.

cache.delete(key, version=None)Link to this definition

Is féidir leat eochracha a scriosadh go sainráite le ``delete () ``chun an taisce do réad áirithe a ghlanadh:

Python console
>>> cache.delete("a")
True

Tugann delete () ``filleadh ``True má scriosadh an eochair go rathúil, False ar shlí eile.

cache.delete_many(keys, version=None)Link to this definition

Más mian leat dornán eochracha a ghlanadh ag an am céanna, is féidir le ``delete_many () ``liosta eochracha atá le glanadh a ghlanadh:

Python console
>>> cache.delete_many(["a", "b", "c"])
cache.clear()Link to this definition

Faoi dheireadh, más mian leat na heochracha go léir sa taisce a scriosadh, bain úsáid as ``cache.clear () ``. Bí cúramach leis seo; bainfidh ``clear () ``gach ruda ón taisce, ní hamháin na heochracha atá leagtha síos ag d'iarratas:

Python console
>>> cache.clear()
cache.touch(key, timeout=DEFAULT_TIMEOUT, version=None)Link to this definition

Socraíonn ``cache.touch () ``éag nua le haghaidh eochair. Mar shampla, chun eochair a nuashonrú chun dul in éag 10 soicind as seo:

Python console
>>> cache.touch("a", 10)
True

Cosúil le modhanna eile, tá an argóint timeout roghnach agus réamhshocraíonn sé ar an rogha TIMEOUT den chúltaca cuí sa socrúit:setting: CACHES.

Filleann touch () ```True má rinneadh teagmháil leis an eochair go rathúil, False ar shlí eile.

cache.incr(key, delta=1, version=None)Link to this definition
cache.decr(key, delta=1, version=None)Link to this definition

Is féidir leat eochair atá ann cheana féin a mhéadú nó a laghdú ag baint úsáide as na modhanna incr () ``nó `decr (), faoi seach. De réir réamhshocraithe, déanfar an luach taisce atá ann cheana a mhéadú nó a laghdú faoi 1. Is féidir luachanna fáis/laghdaithe eile a shonrú trí argóint a sholáthar don ghlao fáis/laghdaithe. Ardófar ValueError má dhéanann tú iarracht eochair taisce nach bhfuil ann a mhéadú nó a laghdú:

Python console
>>> cache.set("num", 1)
>>> cache.incr("num")
2
>>> cache.incr("num", 10)
12
>>> cache.decr("num")
11
>>> cache.decr("num", 5)
6
cache.close()Link to this definition

Is féidir leat an nasc le do taisce a dhúnadh le ``close () ``má chuireann an cúltaca taisce i bhfeidhm.

Python console
>>> cache.close()

Réamhshocrú eochair taisceLink to this heading

Má tá sampla taisce á roinnt agat idir freastalaithe, nó idir do thimpeallachtaí táirgeachta agus forbartha, is féidir go n-úsáidfidh freastalaí eile sonraí a chuimsíonn freastalaí amháin. Má tá formáid na sonraí taisceáilte difriúil idir freastalaithe, d'fhéadfadh fadhbanna an-deacair a dhiagnóisiú a bheith mar thoradh air seo.

Chun é seo a chosc, soláthraíonn Django an cumas na heochracha taisce go léir a úsáideann freastalaí a réamhú <CACHES-KEY_PREFIX>Nuair a shábháiltear eochair taisce áirithe nó a aisghabháil, déanfaidh Django réamh-eochair an taisce go huathoibríoch le luach an socrú taisce: socrú: KEY_PREFIX.

Trí chinntiú go bhfuil difri:setting: `KEY_PREFIX <CACHES-KEY_PREFIX>`ag gach cás Django, is féidir leat a chinntiú nach mbeidh aon imbhuailtí i luachanna taisce.

Leagán taisceLink to this heading

Nuair a athraíonn tú cód reatha a úsáideann luachanna taiscthe, b'fhéidir go mbeidh ort aon luachanna taiscéadaithe atá ann cheana a ghlanadh. Is é an bealach is éasca le seo a dhéanamh ná an taisce iomlán a shruthlú, ach d'fhéadfadh sé seo go gcaillfear luachanna taisce atá fós bailí agus úsáideach.

Soláthraíonn Django bealach níos fearr chun luachanna taisce aonair a dhíriú. <CACHES-VERSION>Tá aitheantóir leagan ar fud an chórais ag creat taisce Django, sonraithe ag baint úsáide as an socrú taisce: leagan: VERSION. Déantar luach an socraithe seo a chomhcheangal go huathoibríoch leis an réimír taisce agus leis an eochair taisce a sholáthraíonn an úsáideoir chun an eochair taisce de

De réir réamhshocraithe, áireofar leagan eochair taisce réamhshocraithe an láithreáin go huathoibríoch Mar sin féin, tá argóint ``leagan ``sa fheidhmeanna taisce príomha uile, ionas gur féidir leat eochrleagan taisce áirithe a shonrú le socrú nó a fháil. Mar shampla:

Python console
>>> # Set version 2 of a cache key
>>> cache.set("my_key", "hello world!", version=2)
>>> # Get the default version (assuming version=1)
>>> cache.get("my_key")
None
>>> # Get version 2 of the same key
>>> cache.get("my_key", version=2)
'hello world!'

Is féidir leagan eochair shonrach a mhéadú agus a shocrú ag baint úsáide as na modhanna incr_version () ``agus `decr_version (). Cuireann sé seo ar chumas eochracha ar leith a chur chuig leagan nua, rud a fhágann gan tionchar ar eochracha eile. Leanúint lenár sampla roimhe seo:

Python console
>>> # Increment the version of 'my_key'
>>> cache.incr_version("my_key")
>>> # The default version still isn't available
>>> cache.get("my_key")
None
# Version 2 isn't available, either
>>> cache.get("my_key", version=2)
None
>>> # But version 3 *is* available
>>> cache.get("my_key", version=3)
'hello world!'

Eochair claochlú taisceLink to this heading

Mar a thuairiscítear sa dá chuid roimhe seo, ní úsáidtear an eochair taisce a sholáthraíonn úsáideoir focal focal - déantar é a chomhcheangal leis an réimír taisce agus an leagan eochair chun eochair taisce deiridh a sholáthar. De réir réamhshocraithe, ceanglaítear na trí chuid ag baint úsáide as colons chun sreang deiridh a tháirgeadh:

Code
def make_key(key, key_prefix, version):
    return "%s:%s:%s" % (key_prefix, version, key)

Más mian leat na codanna a chur le chéile ar bhealaí éagsúla, nó próiseáil eile a chur i bhfeidhm ar an eochair dheiridh (m.sh., díleá hash de na príomhchodanna a thógáil), is féidir leat eochairfheidhm saincheaptha a sholáthar.

Sonraíonn an socrú taisce: `KEY_FUNCTION <CACHES-KEY_FUNCTION>`cosán poncair chuig feidhm a mheaitseann le fréamhshamhail ``make_key () ``thuas. Má chuirtear ar fáil, úsáidfear an eochrfheidhm saincheaptha seo in ionad na feidhme comhcheangailte eochair réamhshocrai

Príomhrabhaidh taisceLink to this heading

Ní cheadaíonn Memcached, an cúltaca taisce táirgeachta is coitianta a úsáidtear, eochracha taisce níos faide ná 250 carachtar nó ina bhfuil spás bán nó carachtair rialaithe, agus beidh eisceacht ina chúis le heochracha den sórt sin a úsáid. Chun cód taisce iniompartha a spreagadh agus iontas míthaitneamhach a íoslaghdú, eisíonn na cúltaca taisce ionsuite eile rabhadh (django.core.cache.backends.base.cachekeyWarning) má úsáidtear eochair a chuirfeadh earráid ar memcached.

Má tá cúltaca táirgeachta á úsáid agat ar féidir leat glacadh le raon níos leithne eochracha (cúltaca saincheaptha, nó ceann de na cúltaca neamh-mheasta), agus gur mhaith leat an raon níos leithne seo a úsáid gan rabhaidh, is féidir leat CachekeyWarning` a thostú leis an gcód seo sa mhodúl bainistí` de cheann de do:

Code
import warnings

from django.core.cache import CacheKeyWarning

warnings.simplefilter("ignore", CacheKeyWarning)

Más mian leat loighic bailíochtaithe eochair saincheaptha a sholáthar ina ionad sin do cheann de na cúltaca ionsuite, is féidir leat é a fho-aicmiú, díreach an modh validate_key a shárú, agus na treoracha chun cúltaca taisce saincheaptha a úsáid `_ a leanúint. Mar shampla, chun é seo a dhéanamh don chúltaca ``locmem`, cuir an cód seo i modúl:

Code
from django.core.cache.backends.locmem import LocMemCache


class CustomLocMemCache(LocMemCache):
    def validate_key(self, key):
        """Custom validation, raising exceptions or warnings as needed."""
        ...

... agus bain úsáid as an gcosán poncaigh Python chuig an rang seo sa chuid: setting: BACKEND `de do shuíomh: <CACHES-BACKEND>CACHES`.

Tacaíocht asincrónachLink to this heading

Tá tacaíocht ag forbairt ag Django do chúltaca taisce asincrónacha, ach ní thacaíonn sé le caching asincrónach fós. Beidh sé ag teacht i scaoileadh amach anseo.

<cache-basic-interface>Tá leaganacha async ag django.core.cache.backends.base.baseCache de:ref: gach modh bonn `. De réir choinbhinsiúin, tá na leaganacha asincrónacha de na modhanna go léir réamhshocraithe le `a `. De réir réamhshocraithe, tá na hargóintí don dá leagan mar an gcéanna:

Python console
>>> await cache.aset("num", 1)
>>> await cache.ahas_key("num")
True

Caches downstreamLink to this heading

Go dtí seo, dhírigh an doiciméad seo ar do shonraí* díniú* a chaitheamh. Ach tá cineál eile caighdeáin ábhartha d'fhorbairt gréasáin freisin: caistriú arna ndéanamh ag taiscí “downstream”. Is córais iad seo a dhéanann taisce leathanaigh d'úsáideoirí fiú sula sroicheann an t-iarratas do shuíomh Gréasáin.

Seo cúpla sampla de chaches iarshrutha:

  • Agus HTTP á úsáid agat, féadfaidh do: abbr: ISP (Soláthraí Seirbhíse Idirlín) `leathanaigh áirithe a thaisceadh, mar sin má d'iarr tú leathanach ó ``http://example.com/`, chuirfeadh do ISP an leathanach chugat gan rochtain a fháil go díreach ar example.com. Níl aon eolas ag cothabhálaí example.com ar an gcaistriú seo; suíonn an ISP idir example.com agus do bhrabhsálaí gréasáin, ag láimhseáil an caistriú go léir go trédhearcach. Ní féidir a chaiteáil den sórt sin indéanta faoi HTTPS toisc gur ionsaí fear sa lár a bheadh ann.

  • D'fhéadfadh go mbeadh do shuíomh Gréasáin Django taobh thiar de*cache* seachfhreastalaí*, mar shampla Squid Web Proxy Cache (http://www.squid-cache.org/), a choscann leathanaigh le haghaidh feidhmíochta. Sa chás seo, déanfadh an seachfhreastalaí gach iarratas a láimhseáil ar dtús, agus ní chuirfeadh sé chuig d'iarratas ach amháin más gá.

  • Coscann do bhrabhsálaí gréasáin leathanaigh, freisin. Má sheolann leathanach gréasáin na ceanntála cuí amach, úsáidfidh do bhrabhsálaí an chóip thaisceáilte áitiúil le haghaidh iarratais ina dhiaidh sin chuig an leathanach sin, gan teagmháil a dhéanamh leis an leathanach gréasáin arís chun a fheiceáil an bhfuil athrú aige.

Is borradh deas éifeachtúlachta é an chaching anuas, ach tá contúirt ann dó: Tá difríocht idir ábhar go leor leathanaigh ghréasáin bunaithe ar fhíordheimhniú agus go leor athróg eile, agus d'fhéadfadh córais taisce a shábháil leathanaigh atá bunaithe go dall ar URLanna sonraí míchearta nó íogair a nochtadh do chuairteoirí ina dhiaidh sin ar na leathanaigh sin.

Mar shampla, má oibríonn tú córas ríomhphoist gréasáin, ansin braitheann ábhar an leathanaigh “bosca isteach” ar an úsáideoir atá logáilte isteach. Má chuaigh ISP do shuíomh a chosc go dall, ansin bheadh a leathanach bosca isteach úsáideora atá sonrach le húsáideoir a stóráilte isteach tríd an ISP sin do chuairteoirí ina dhiaidh sin ar an suíomh. Níl sé sin fionnuar.

Ar ámharaí an tsaoil, soláthraíonn HTTP réiteach don fhadhb seo. Tá roinnt ceanntásca HTTP ann chun treoir a thabhairt do chaches iarshrutha a n-ábhar taisce a dhifriú ag brath ar athróga ainmnithe, agus chun meicníochtaí taiscéála a insint gan leathanaigh áirithe a thaisceadh. Breathnóimid ar chuid de na ceanntásca seo sna codanna a leanann.

Ag baint úsáide as ceanntásca VaryLink to this heading

Sainmhíníonn an ceannteideal Vary cén ceannteideal iarratais ba chóir do mheicníocht taisce a chur san áireamh agus a eochair taisce á thógáil. Mar shampla, má bhraitheann ábhar leathanaigh ghréasáin ar rogha teanga úsáideora, deirtear go n-athraíonn an leathanach ar an teanga.

De réir réamhshocraithe, cruthaíonn córas taisce Django a heochracha taisce ag baint úsáide as an URL láncháilithe a iarrtar - m.sh., https://www.example.com/stories/2005/?order_by=author . Ciallaíonn sé seo go n-úsáidfidh gach iarratas ar an URL sin an leagan taisceáilte céanna, beag beann ar dhifríochtaí gníomhaire úsáideora amhail fianáin nó roghanna teanga. Mar sin féin, má tháirgeann an leathanach seo ábhar éagsúil bunaithe ar dhifríocht éigin i gceanntásca iarratais - mar shampla fianán, nó teanga, nó gníomhaire úsáideora - beidh ort an ceannteideal Vary a úsáid chun meicníochtaí caching a insint go mbraitheann aschur an leathanaigh ar na rudaí sin.

Chun é seo a dhéanamh i Django, bain úsáid as an maisitheoir amharc áisiú:func: django.views.decorators.vary.vary_on_headers, mar sin:

Code
from django.views.decorators.vary import vary_on_headers


@vary_on_headers("User-Agent")
def my_view(request): ...

Sa chás seo, déanfaidh meicníocht caching (mar shampla middleware taisce Django féin) leagan ar leithligh den leathanach a thaisceadh do gach gníomhaire úsáideora uathúil.

Is é an buntáiste a bhaineann leis an maisitheoir vary_on_headers` a úsáid seachas an ceannteideal Vary a shocrú de láimh (ag baint úsáide as response.heads ['Vary'] = 'user-agent' `) ná go gcuireann an maisitheoir ** leis an gceannteideal Vary` (a d'fhéadfadh a bheith ann cheana féin).

Is féidir leat ceanntásca iolracha a chur chuig ``vary_on_heads () ``:

Code
@vary_on_headers("User-Agent", "Cookie")
def my_view(request): ...

Insíonn sé seo do chaisceanna iarshrutha go n-athróidh ar*an bheath*, rud a chiallaíonn go bhfaighidh gach teaglaim de ghníomhaire úsáideora agus fianán a luach taisce féin. Mar shampla, measfar iarratas leis an ngníomhaire úsáideora Mozilla agus an luach fianáin foo=bar difriúil ó iarratas leis an ngníomhaire úsáideora Mozilla agus an luach fianáin foo=ham.

Toisc go bhfuil éagsúlacht ar fhianán chomh coitianta, tá a: func: django.views.decorators.vary.vary_on_cookie maisitheoir ann. Tá an dá thuairim seo coibhéiseach:

Code
@vary_on_cookie
def my_view(request): ...


@vary_on_headers("Cookie")
def my_view(request): ...

Níl na ceanntásca a chuireann tú chuig vary_on_headers` íogair do chásanna; ``"Gníomhaireacht úsáideora” ``an rud céanna le ``"úsáideach-gníomhaireaí"`.

Is féidir leat feidhm chúntóra a úsáid freisin, :func: django.utils.cache.patch_vary_headers, go díreach. Socraíonn an fheidhm seo, nó cuireann sé leis an “Ceannteideal éagsúla”. Mar shampla:

Code
from django.shortcuts import render
from django.utils.cache import patch_vary_headers


def my_view(request):
    ...
    response = render(request, "template_name", context)
    patch_vary_headers(response, ["Cookie"])
    return response

Glacann patch_vary_headers an:class: ~django.http.http.httpResponse mar an chéad argóint agus liosta/tiúpla d'ainmneacha ceanntásc cás-neamh-íogair mar an dara argóint.

<9110 #section -12.5.5>Le haghaidh tuilleadh eolais faoi cheanntásca Vary, féach an:rfc: official Vary spec.

Taisce a rialú: Ceannteidil eile a úsáidLink to this heading

Is iad fadhbanna eile a bhaineann le caistriú ná príobháideacht sonraí agus an cheist cá háit ar chóir sonraí a stóráil i gcaitheamh taiscí.

De ghnáth bíonn dhá chineál taisce ag úsáideoir: taisce a bhrabhsálaí féin (taisce príobháideach) agus taisce a sholáthraí (taisce poiblí). Úsáideann iolrúsáideoirí taisce poiblí agus tá sé á rialú ag duine eile. Cuireann sé seo fadhbanna le sonraí íogair - níl tú ag iarraidh, abair, d'uimhir chuntais bhainc a stóráiltear i taisce poiblí. Mar sin teastaíonn bealach ó fheidhmchláir ghréasáin chun na sonraí atá príobháideach agus na sonraí atá poiblí a insint

Is é an réiteach ná a chur in iúl gur chóir go mbeadh taisce leathanaigh “príobháideach.” Chun é seo a dhéanamh i Django, bain úsáid as an maisitheoir amharc: :func: ~django.views.decorators.cache.cache_control. Sampla:

Code
from django.views.decorators.cache import cache_control


@cache_control(private=True)
def my_view(request): ...

Tugann an maisitheoir seo aire don cheannteideal HTTP cuí a sheoladh amach taobh thiar de na radhairc.

Tabhair faoi deara go bhfuil na socruithe rialaithe taisce “príobháideach” agus “poiblí” go comhpháirteach. Cinntíonn an maisitheoir go mbaintear an treoir “phoiblí” más chóir “príobháideach” a shocrú (agus a mhalairt). Bheadh úsáid samplach den dá threoir ná suíomh blag a thairgeann iontrálacha príobháideacha agus poiblí araon. Féadfar iontrálacha poiblí a stóráil ar aon taisce roinnte. Úsáideann an cód seo a leanas: func: ~django.utils.cache.patch_cache_control, an bealach láimhe chun an ceannteideal rialaithe taisce a mhodhnú (tugtar air go hinmheánach ag an maisitheoir:: ~django.views.decorators.cache.cache_control):

Code
from django.views.decorators.cache import patch_cache_control
from django.views.decorators.vary import vary_on_cookie


@vary_on_cookie
def list_blog_entries_view(request):
    if request.user.is_anonymous:
        response = render_only_public_entries()
        patch_cache_control(response, public=True)
    else:
        response = render_private_and_public_entries(request.user)
        patch_cache_control(response, private=True)

    return response

Is féidir leat taiscí iarshrutha a rialú ar bhealaí eile freisin (féach: rfc: 9111 le haghaidh sonraí faoi chaching HTTP). <9111 #section -5.2.2.1>Mar shampla, fiú mura n-úsáideann tú creat taisce taobh freastalaí Django, is féidir leat a rá fós do chliaint radharc a thaisceadh ar feadh méid áirithe ama leis an treor:rfc: max-age:

Code
from django.views.decorators.cache import cache_control


@cache_control(max_age=3600)
def my_view(request): ...

(Má úsáideann t* an middleware caching, socraíonn sé an max-aois ``luach an socruithe: `CACHE_MIDDLEWARE_SECONDS cheana féin. Sa chás sin, beidh tosaíocht ag an maisitheoir saincheaptha ``max_age ``óna:func: ~django.views.decorators.cache.cache_control, agus cumasófar na luachanna ceanntásc i gceart.)

Tá aon treoir bhailí freagartha Cache-Control bailí i ``cache_control () ``. Seo roinnt samplaí eile:

  • no_transform=True

  • must_revalidate=True

  • stale_while_revalidate=uimh_soicind

  • no_cache=True

Is féidir liosta iomlán na dtreoracha ar eolas a fháil sa chlárlann IANA`_ (tabhair faoi deara nach mbaineann gach ceann acu le freagraí).

Más mian leat ceanntásca a úsáid chun cúisceáin a dhíchumasú ar fad, is maisitheoir amharc é: :func: ~django.views.decorators.cache.never_cache a chuireann ceanntásc leis chun a chinntiú nach ndéanfaidh brabhsálaithe nó caches eile an freagra a stóráil. Sampla:

Code
from django.views.decorators.cache import never_cache


@never_cache
def myview(request): ...

Ordú MIDDLEWARELink to this heading

Má úsáideann tú middleware caching, tá sé tábhachtach gach leath a chur san áit cheart laistigh den socrú: setting: MIDDLEWARE. Sin toisc go gcaithfidh an middleware taisce a bheith ar an eolas faoi na ceannteidil trína ndéanfaidh an stóráil taisce a athrú. Cuireann Middleware rud éigin i gcónaí leis an gceannteideal freagartha ``Vary` nuair is féidir leis.

Ritheann UpdateCacheMiddleware le linn na céime freagartha, áit a reáchtáiltear middleware in ord droim, mar sin ritheann mír ag barr an liosta*deireana* le linn na céime freagartha. Mar sin, ní mór duit a chinntiú go bhfeictear UpdateCacheMiddleware roimh aon mheán-earraí eile a d'fhéadfadh rud éigin a chur leis an gceannteideal Vary. Déanann na modúil middleware seo a leanas amhlaidh:

  • Cuireann SessionMiddleware leis Cookie

  • Cuireann GZipMiddleWare Accept-Encoding

  • Cuireann Localemiddleware leis Accept-Language

Ar an láimh eile, ritheann fetchfromcachemiddleware le linn na céime iarratais, áit a gcuirtear meán-earraí i bhfeidhm den chéad uair go deireanach, mar sin ritheann mír ag barr an liosta*an chéad* le linn na céime iarratais. Caithfidh an FetchFromCacheMiddleware rith freisin tar éis lár earraí eile an ceannteideal Vary a nuashonrú, mar sin caithfidh FetchfromCacheMiddleware a bheith aith* tar éis aon earra a dhéanann amhlaidh.