|
Rakenduste arendamine Redisega on meeldiv protsess, kuid nagu iga tehnoloogia puhul, on mõned asjad, mida tuleb Redis-põhiste rakenduste disainimisel meeles pidada. Võib-olla oled varem tuttav kogu relatsioonilise andmebaasi arenduse rutiiniga ning Redis-põhisel rakenduste arendamisel on palju sarnasusi, kuid pead meeles pidama järgmisi kahte asja – Redis on mälus asuv andmebaas ja see on ühe lõimega. Seetõttu tuleb Redis'i kasutamisel pöörata tähelepanu järgmistele punktidele: 1. Kontrolli kõiki Redis salvestatud võtmeid Andmebaasi peamine funktsioon on andmete salvestamine, kuid on tavaline, et arendajad ignoreerivad mõningaid andmebaasis salvestatud andmeid rakenduse nõuete või andmekasutusmeetodite muutuste tõttu, sama kehtib ka Redis'i puhul. Võid jätta tähelepanuta teatud võtmed, mis aeguvad, või unustada andmed, sest sinu rakenduse moodul on aegunud. Mõlemal juhul salvestab Redis andmeid, mida enam ei kasutata, võttes ilma põhjuseta ruumi. Redis'i nõrgalt struktureeritud andmemuster teeb keeruliseks välja selgitada, mis on keskselt salvestatud, kui just ei kasutata väga küpset võtmeterminoloogiat. Õige nimetamismeetodi kasutamine lihtsustab andmebaasi haldamist ning kui loote võtmete jaoks nimeruumi oma rakenduse või teenuse kaudu (tavaliselt kasutades kooloneid võtmenimede jagamiseks), saate andmeid hõlpsasti tuvastada nende ümberpaigutamisel, konverteerimisel või kustutamisel. Teine levinud kasutusjuhtum Redis on teise andmesalvestusena kuumade andmeelementide jaoks, kus enamik andmeid salvestatakse teistesse andmebaasidesse, nagu PostgreSQL või MongoDB. Sellistes kasutusjuhtumites unustavad arendajad sageli kustutada vastavad andmed Redises, kui andmed eemaldatakse esmasest mälust. Sellisel juhul on tavaliselt vajalik kaskaadkustutamine, mille puhul saab seda saavutada, salvestades kõik identifikaatorid konkreetse andmeelemendi jaoks Redis'i konfiguratsioonis, et pärast andmete kustutamist esmasest andmebaasist kutsutakse puhastaja kustutama kõik asjakohased koopiad ja info. 2. Kontrolli kõigi võtmenimede pikkust Nagu eespool öeldud, kasutasime sobivaid nimetamiskonventsioone ja lisasime eesliiteid, et tuvastada, kuhu andmed liiguvad, nii et see tundub olevat vastuolus sellega. Siiski ära unusta, et Redis on mälus asuv andmebaas ja mida lühemad võtmed, seda vähem ruumi vajad. Loomulikult, kui andmebaasis on miljoneid või miljardeid võtmeid, mõjutab võtme nime pikkus suurt mõju. Näiteks 32-bitises Redis serveris, kui salvestad miljon võtit 32-tähemärgilise pikkusega, võtab see umbes 96MB ruumi, kui kasutad 6-tähelist võtmenime, kuid kui kasutad 12-tähelist võtmenime, suureneb ruumikulu umbes 111MB-ni. Kui võtmeid on rohkem, avaldab lisakulu 15% märkimisväärset mõju. 3. Kasuta õiget andmestruktuuri Olgu see siis mälukasutus või jõudlus, mõnikord võivad andmestruktuurid avaldada suurt mõju, siin on mõned parimad praktikad, millele viidata: Selle asemel, et salvestada andmeid tuhandete (või miljonitena) eraldi stringidena, kaalu räsi andmestruktuuride kasutamist seotud andmete grupeerimiseks. Räsi tabelid on väga tõhusad ja võivad vähendada mälukasutust; Samal ajal on räsi kasutamine kasulikum detailide abstraktsiooni ja koodi loetavuse jaoks. Kui sobib, kasuta listi seti asemel. Kui sa ei pea seadistatud funktsiooni kasutama, võib List pakkuda seatud kiirust ja kasutada vähem mälu. Sorteeritud hulgad on kõige kallimad andmestruktuurid nii mälutarbimise kui ka põhiliste operatsioonide keerukuse poolest. Kui vajad lihtsalt võimalust kirjeid pärida ega hooli selliste omaduste sorteerimisest, siis on väga soovitatav kasutada räsi tabeleid. Redis sageli tähelepanuta jäetud funktsioon on bitikaardid või bitikomplektid (pärast V2.2). Bitikomplektid võimaldavad teha mitmeid bititaseme operatsioone Redis väärtustega, näiteks kerget analüüsi. 4. Ära kasuta võtit SCAN-i kasutamisel Alates Redis v2.8-st on SCAN käsk juba saadaval, mis võimaldab võtmeid võtmeruumist kursoriga taastada. Võrreldes KEYS-käsuga, kuigi SCAN ei suuda kõiki sobitavaid tulemusi korraga tagastada, väldib see süsteemi blokeerimise suurt riski, mistõttu saab mõningaid operatsioone täita peasõlmes. Oluline on märkida, et SCAN-käsk on kursoripõhine iteraator. Iga kord, kui SCAN käsk kutsutakse, tagastatakse kasutajale uus kursor ning kasutaja peab kasutama seda uut kursorit SCAN käsu kursori parameetrina järgmises iteratsioonis, et jätkata eelmist iteratsiooniprotsessi. Samal ajal saavad kasutajad SCAN-iga käske reguleerida ka võtmenime režiimi ja loendamise valikute abil. SCAN-iga seotud käsud hõlmavad ka SSCAN-käske, HSCAN käske ja ZSCAN-käske, mida kasutatakse vastavalt kogude, räsi võtmete ja järgede jaoks. 5. Kasuta serveripoolseid Lua skripte Redis'i kasutamise protsessis pakub Lua skriptide tugi arendajatele kahtlemata väga sõbralikku arenduskeskkonda, vabastades seeläbi kasutajate loovuse oluliselt. Kui Lua skripte kasutatakse õigesti, võivad need tuua olulisi paranemisi jõudluses ja ressursikasutuses. Selle asemel, et andmeid CPU-le edastada, võimaldavad skriptid käivitada loogikat, mis on andmetele kõige lähemal, vähendades võrgu latentsust ja üleliigset andmeedastust. Redises on Lua väga klassikaline kasutusjuhtum andmete filtreerimine või andmete koondamine rakendusse. Kapseldades töötlemisvoo skripti, saad lihtsalt sellele helistada, et saada väiksem vastus väheste ressurssidega ja lühema ajaga. Nipp:Lua on suurepärane, kuid tal on ka mõningaid probleeme, näiteks raskused vigade raporteerimisel ja käsitlemisel. Tark lähenemine on kasutada Redis'i Pub/Sub funktsiooni ja lasta skriptil saata logisõnumeid pühendatud kanalile. Seejärel loo tellijaprotsess ja töötle seda vastavalt.
|