Redis-vahemälu kasutamine parandab oluliselt rakenduste jõudlust ja efektiivsust, eriti andmepäringute puhul. Kuid samal ajal toob see kaasa ka mõningaid probleeme. Nende seas on kõige olulisem probleem andmete järjepidevus, mis on rangelt lahendamatu. Kui andmete järjepidevus on vajalik, siis vahemällu salvestamist kasutada ei saa.
Teised tüüpilised probleemid on vahemälu tungimine, vahemälu laviin ja vahemälu lagunemine. Praegu on tööstuses ka populaarsemaid lahendusi. See artikkel ei ole mõeldud nende kolme probleemi täiuslikumaks lahendamiseks ega ka tööstuses populaarsete lahenduste alistamiseks. Selle asemel demonstreerime neid kolme probleeminähtust tegelikust kooditoimingust. Selle põhjuseks on see, et on raske omada väga elavat arusaama peas ainult akadeemilise selgituse põhjal ning tegelike koodidemonstratsioonidega saab süvendada oma arusaamist ja arusaamist neist probleemidest.
Vahemälu läbitungimine
Vahemälu tungimine tähendab andmete päringute tegemist, mis andmebaasis ei eksisteeri. Kui võtit ei eksisteeri või võti on aegunud, päritakse andmebaas ja päritud objektid lisatakse vahemällu salvestatud. Kui andmebaasi päringuobjekt on tühi, siis seda ei vahemällu salvestata.
Koodi voog
- parameetri edastamine objekti primaarvõtme ID
- Hangi objekt vahemälust võtme põhjal
- Kui objekt ei ole tühi, tagastatakse otse
- Kui objekt on tühi, tee andmebaasipäring
- Kui andmebaasist päritud objekt ei ole tühi, pane see vahemällu (sea aegumisaeg). Kujuta ette olukorda, mis juhtuks, kui sisestatud parameeter oleks -1? See -1 on objekt, mis ei tohi eksisteerida. Andmebaasi päritakse iga kord, iga päring on tühi ja seda ei salvestata iga kord. Kui toimub pahatahtlik rünnak, saab seda haavatavust ära kasutada, et avaldada andmebaasile survet või isegi ülekoormata seda. Isegi kui kasutatakse UUID-d, on lihtne leida olematu KEY ja rünnata.
Minu töös kasutan nullväärtuste vahemällu salvestamise meetodit, st sammu 5 [koodiprotsessis], kui andmebaasist päritud objekt on tühi, pannakse see samuti vahemällu ja vahemälu aegumisaeg on lühike, näiteks määran selle 60 sekundile.
Varjatud laviin
Cache laviin' tähendab vahemälu komplekti aegumist kindla ajavahemiku jooksul.
Üks laviini põhjusi, näiteks selle artikli kirjutamisel, on see, et varsti saabub kell null kaheteistkümnendal päeval ja varsti tuleb kiirostmise laine. Siis kell üks öösel lõpeb selle kaupade varu. Selle kaupade partii ligipääsupäring kuulub andmebaasile ning andmebaasis esinevad perioodilised rõhutipud.
Kui Xiaobian tegeleb e-kaubanduse projektidega, võtab ta tavaliselt kasutusele erinevaid kaubakategooriaid ja salvestab erinevaid tsükleid. Kaubad samas kategoorias, pluss juhuslik tegur. Nii saab vahemälu aegumisaega võimalikult palju hajutada ning populaarsete kategooriate toodete vahemäluaeg on pikem ja ebapopulaarsete kategooriate toodete vahemäluaeg lühem, mis võib samuti säästa vahemällu salvestamise teenuse ressursse.
Tegelikult ei ole tsentraliseeritud aegumine väga surmav ning kõige saatuslikum vahemälu laviin on see, et vahemäluserveri sõlm läheb välja või katkeb ühenduse. Kuna looduslikult tekkiv vahemälu laviin, peab tekkima kindla aja jooksul, suudab andmebaas survele vastu pidada ja sel ajal suudab ka andmebaas survet taluda. See on vaid perioodiline surve andmebaasile. Vahemälu teenuse sõlme seisakuaeg tekitab andmebaasiserverile ettearvamatut survet ning see võib andmebaasi hetkega üle koormata.
Vahemälu jaotus
Vahemälu jaotus tähendab võtit, mis on väga kuum, kannab pidevalt suurt samaaegsust, suur paralleelsus keskendub sellele punktile ligipääsule; kui see võti ebaõnnestub, murdub pidev suur paralleelsus vahemälust läbi ja küsib otse andmebaasi, nagu augu puurimine barjäärisse.
Kui Xiaobian tegeles e-kaubanduse projektidega, tegi ta sellest tootest "hiti".
Tegelikult on enamikul juhtudel sellise plahvatuse puhul raske panna andmebaasiserverile tugevat survet. Vähesed ettevõtted on sellisele tasemele jõudnud. Seetõttu on pragmaatiline redaktor peamiste toodete jaoks varakult ette valmistanud, et vahemälu ei aeguks kunagi. Isegi kui mõned tooted fermenteerivad end hittideks, saab neid seada kunagi aegumatuks.
Peatee on lihtne ja mutex-võtme vastastikuse tagasilükkamise lukk pole tegelikult kasutusel.
|