Hvað er skyndiminni? Einföld leiðbeining fyrir smiði forrita
Skyndiminni (caching) þýðir að geyma tilbúið afrit af einhverju sem var hægt eða dýrt að sækja, svo næsta beiðni um það sé hægt að svara fljótt úr afritinu. Afritið kallast cache. Vafrinn þinn geymir myndir í skyndiminni svo síða hlaðist hraðar í annarri heimsókn, og þjónn geymir niðurstöðu hægrar gagnagrunnsfyrirspurnar svo hann þurfi ekki að keyra hana fyrir hvern gest.
Skyndiminni gerir öpp hraðari og ódýrari í rekstri. Helsta málamiðlunin er að afritið getur orðið úrelt.
Af hverju skyndiminni skiptir máli þegar þú byggir með gervigreind
Þú lendir á skyndiminni í forritum sem gervigreind hefur smíðað á þrjá vegu:
- „Ég uppfærði appið en ég sé enn gömlu útgáfuna.“ Þetta er algengasta skiptið sem skyndiminni kemur við sögu, og yfirleitt er það skaðlaust: vafrinn þinn eða CDN sýnir vistað afrit.
- Hraði. Ef síða er hæg vegna þess að hún reiknar sömu tölurnar fyrir hvern gest getur það að geyma niðurstöðuna gert hana nánast tafarlausa.
- Kostnaður. Margir gervigreindarsmiðir og hýsingaraðilar rukka fyrir reikniafl, gagnagrunnstíma og utanaðkomandi API-köll. Ef þúsund gestir kalla á sömu dýru beiðnina getur skyndiminni látið þig borga einu sinni.
Grunnatriðin gera þér kleift að biðja um skyndiminni þar sem það hjálpar og þekkja það þegar það er ástæða þess að eitthvað lítur skringilega út.
Dæmisaga úr daglegu lífi
Hugsaðu um eldhúsið á annasömu kaffihúsi.
Á hverjum morgni gæti kokkurinn hellt upp á hvern kaffibolla úr nýmöluðum baunum þegar hann er pantaður. Það er hægt. Í staðinn heldur hann potti af síukaffi tilbúnum á hitaplötunni. Flestir viðskiptavinir fá bolla á sekúndum. Það er skyndiminnishitt (cache hit). Þegar potturinn klárast er hellt upp á nýjan. Það er skyndiminnisbrestur (cache miss).
En kaffi sem stendur of lengi verður vont, svo kaffihúsið hefur reglu: henda öllum potti sem er eldri en 30 mínútur. Sú regla er gildistími skyndiminnisins. Enginn myndi halda sama potti allan daginn, og enginn myndi forhella sérpöntun með haframjólk og þremur sykrum. Sumt á alls ekki að geyma.
Hvar skyndiminni eru
Ein síðuhleðsla getur farið í gegnum nokkur skyndiminni, frá því sem er næst notandanum til þess sem er lengst í burtu:
| Skyndiminni | Hvar það er | Hvað það geymir yfirleitt | Dæmi |
|---|---|---|---|
| Skyndiminni vafrans | Í tæki gestsins | Myndir, stílskrár, skriftur, letur | Merkið þitt hleðst samstundis á annarri síðu |
| CDN-skyndiminni | Þjónar um allan heim, nálægt gestum | Kyrrar skrár og stundum heilar síður | Gestur í Tókýó fær skrár frá nálægum þjóni, ekki frá upprunanum þínum |
| Skyndiminni forrits | Á eða við þjóninn, oft í minni eða Redis | Niðurstöður hægra gagnagrunnsfyrirspurna eða utanaðkomandi API-kalla | Gengi gjaldmiðla, sótt einu sinni á klukkustund |
| Skyndiminni gagnagrunns | Inni í gagnagrunninum | Nýlega notuð gögn og fyrirspurnaáætlanir | Vinsælar raðir haldast í hraðvirku minni |
CDN (content delivery network) er í grunninn heimsvíður net skyndiminna fyrir skrár síðunnar þinnar. Sjá hvað er CDN.
Hvernig skyndiminni ákveður hvað það geymir
Hvert skyndiminni þarf að svara sömu spurningum:
- Hvað má geyma? Opin, sameiginleg gögn (mynd af vöru, bloggfærsla): já. Einkagögn (síða notandareiknings, skilaboð hans): aldrei í sameiginlegu skyndiminni.
- Hversu lengi? Þetta er TTL (time to live). Logo gæti verið geymt í eitt ár; birgðastaða í 30 sekúndur.
- Hvernig er því uppfært? Annað hvort rennur afritið út og er sótt aftur, eða forritið fjarlægir það viljandi þegar gögnin breytast. Það kallast ógilding (invalidation).
Fyrir vefsíður segir þjónninn vöfrum og CDN-um hvernig þeir eigi að geyma hverja skrá með Cache-Control-hausnum. Til dæmis þýðir Cache-Control: max-age=3600 „þú mátt nota þetta afrit í eina klukkustund“.
Nútímaverkfæri til byggingar leysa erfiðasta hlutann fyrir kyrrar skrár með skyndiminnisskilum (cache busting): í hvert skipti sem skrá breytist fær hún nýtt nafn með fingrafari, eins og app.3f9a2c.js. Vafrar mega geyma gamla nafnið lengi, því nýja útgáfan hefur einfaldlega annað nafn.
Vinnudæmi: vörulisti
Þú ert með litla netverslun. Forsíðan sýnir 50 vörur með verði og birgðastöðu úr gagnagrunninum, auk listans „vinsælt“ sem krefst hægs útreiknings yfir allar pantanir.
- Myndir og skriftur eru geymdar í skyndiminni vafrans og CDN í langan tíma. Hver ný smíði gefur breyttum skrám nýtt nafn, svo uppfærslur birtast samt.
- Vinsældalistinn er reiknaður einu sinni á 10 mínútna fresti og geymdur í skyndiminni forritsins. Hver gestur á þessum 10 mínútum fær vistuðu niðurstöðuna samstundis.
- Verð eru geymd í stuttan tíma, og skyndiminnið er hreinsað í hvert sinn sem þú breytir vöru, svo viðskiptavinir sjái aldrei gamalt verð lengi.
- Birgðastaða við útskráningu er aldrei geymd. Þegar einhver smellir á „Kaupa“ athugar appið raunverulegan gagnagrunninn, svo það getur ekki selt vöru sem var að seljast upp.
- Karfan og reikningssíðurnar eru aldrei geymdar í sameiginlegum skyndiminnum, því þær eru persónulegar.
Niðurstaðan: forsíðan er hröð, gagnagrunnurinn vinnur miklu minna, og ekkert sem skiptir máli fyrir peninga eða friðhelgi er nokkurn tíma úrelt.
Lykilhugtök
| Hugtak | Merking |
|---|---|
| Skyndiminnishitt / -brestur | Gögnin fundust í skyndiminninu / þurfti að sækja þau frá upprunanum. |
| TTL (time to live) | Hversu lengi vistað afrit er talið ferskt. |
| Úrelt gögn (stale data) | Vistað afrit sem er ekki lengur rétt. |
| Ógilding (invalidation) | Að fjarlægja vistað afrit viljandi því upprunalegu var breytt. |
| Skyndiminnisskil (cache busting) | Að breyta nafni skráar eða slóð þegar hún breytist, svo skyndiminni sæki nýju útgáfuna. |
| Cache-Control | HTTP-hausinn sem segir vöfrum og CDN-um hvernig þeir eigi að geyma svar. |
| Harð endurhleðsla (hard refresh) | Endurhleðsla á síðu þar sem vafranum er sagt að hunsa skyndiminnið sitt. |
| Redis | Vinsæl geymsla í minni, oft notuð sem skyndiminni forrits. |
Algengar misskilningar
- „Skyndiminni er alltaf gott.“ Að geyma rangt efni veldur raunverulegum villum: gömlu verði, vantandi nýjum færslum, eða, versta tilvikið, einkasíðu eins notanda sýnda öðrum. Geymdu af ásetningi.
- „Ef ég sé gömlu útgáfuna mistókst uppfærslan.“ Yfirleitt ekki. Prófaðu harða endurhleðslu (Ctrl+Shift+R, eða Cmd+Shift+R á Mac) eða glugga í einkavafri áður en þú gerir ráð fyrir að eitthvað sé bilað.
- „Skyndiminni lagar hægt forrit.“ Það felur hægaganginn fyrir endurteknum beiðnum. Fyrsta beiðnin er enn hæg, og ef undirliggjandi vandinn er vantandi gagnagrunnsvísitala þarftu að laga hana líka.
- „Ég ætti að geyma allt eins lengi og hægt er.“ Löng geymslutími hentar skrám sem fá nýtt nafn þegar þær breytast. Fyrir HTML-síður og gögn eru styttri tímar öruggari.
- „Að hreinsa skyndiminnið mitt lagar það fyrir alla.“ Það hreinsar aðeins þinn vafra. Gestir og CDN-skyndiminni eiga enn sín eigin afrit.
Hvað á að biðja gervigreindarsmiðinn þinn um
- „Hvaða hlutar þessa forrits eru hægir og hverja er hægt að geyma örugglega?“
- „Geymdu [vinsældalistann / API-niðurstöðuna] í [N] mínútur og hreinsaðu hana þegar undirliggjandi gögn breytast.“
- „Gakktu úr skugga um að engin síða með persónu- eða reikningsgögn geti verið geymd af CDN eða í sameiginlegu skyndiminni.“
- „Settu langan skyndiminnistíma fyrir skrár með fingrafari og stuttan fyrir HTML.“
- „Geymdu svör frá [utanaðkomandi API] svo við kallum ekki á það í hverri síðuhleðslu, og segðu mér hversu úrelt gögnin gætu orðið.“
- „Ég sé gamla útgáfu eftir birtingu. Er það skyndiminni vafrans míns, eða hefur eitthvað ekki verið sett út?“
Skyndiminni í Mythex
Eftir að þú birtir uppfærslu á Mythex-appi segja skjölin að skyndiminni CDN geti dregist stuttlega, og að harð endurhleðsla á opinberu slóðinni sýni nýju útgáfuna. Sjá Hvernig birt er. Síðan Takmörk hýsingar mælir einnig með því að geyma kyrrar skrár í skyndiminni, því hýsing, gagnagrunnstími og bandvídd eru greidd af innistæðu þinni. Allt umfram það, eins og að geyma niðurstöður fyrirspurna eða API-svör, er eitthvað sem þú biður fulltrúann að byggja inn í appið.
Tengt efni: hvað er CDN, hvernig þú gerir vefsíðuna þína hraðari og hvað er hraðatakmörkun.
Spurningar
Hvað er skyndiminni í einföldu máli?
Skyndiminni þýðir að geyma afrit af einhverju sem var hægt eða dýrt að sækja, svo næst þegar það er þörf sé hægt að senda það hratt úr afritinu. Vafrar, CDN, þjónar og gagnagrunnar nota allir skyndiminni til að gera öpp hraðari og ódýrari í rekstri.
Af hverju sé ég enn gömlu útgáfuna af vefsíðunni minni eftir uppfærslu?
Vafrinn þinn eða CDN sendir líklega vistað afrit af gömlu skránum. Harð endurhleðsla (Ctrl+Shift+R á Windows, Cmd+Shift+R á Mac) lagar það yfirleitt. Fyrir gesti gefa vel smíðaðar síður uppfærðum skrám nýtt nafn svo skyndiminni sæki nýju útgáfuna sjálfkrafa.
Hvað gerist þegar ég hreinsa skyndiminni?
Með því að hreinsa skyndiminni vafrans eyðir þú vistuðum afritum af skrám og síðum sem vafrinn geymdi, svo hann sæki allt aftur ferskt næst. Það getur lagað síður sem líta bilaðar eða úreltar út, og síðurnar hlaðast aðeins hægar í fyrsta skiptið á eftir.
Getur skyndiminni valdið vandamálum?
Já. Helsta hættan er að senda úrelt gögn, til dæmis gamalt verð eða úrelta birgðastöðu, eða enn verra: að geyma einkasíðu eins notanda í sameiginlegu skyndiminni og sýna hana einhverjum öðrum. Góðar reglur um skyndiminni ákveða hvað má geyma, hversu lengi, og geyma aldrei persónuupplýsingar í sameiginlegu skyndiminni.