|
Att utveckla applikationer med Redis är en trevlig process, men som med all teknik finns det några saker du bör ha i åtanke när du designar Redis-baserade applikationer. Du kanske redan var bekant med hela rutinen för relationsdatabasutveckling, och Redis-baserad applikationsutveckling har många likheter, men du måste ha följande två saker i åtanke – Redis är en minnesdatabas och den är enkeltrådad. Därför måste du när du använder Redis vara uppmärksam på följande punkter: 1. Kontrollera alla tangenter som lagras i Redis Databasens huvudsakliga funktion är att lagra data, men det är normalt att utvecklare ignorerar viss data som lagras i databasen på grund av förändringar i applikationskrav eller dataanvändningsmetoder, och detsamma gäller i Redis. Du kan missa vissa nycklar som går ut, eller så kan du glömma datan eftersom en modul i din applikation är föråldrad. I båda fallen lagrar Redis viss data som inte längre används, vilket tar upp lite utrymme utan anledning. Redis svagt strukturerade datamönster gör det svårt att lista ut vad som lagras centralt om man inte använder en mycket mogen nomenklatur för nycklar. Att använda rätt namngivningsmetod förenklar din databashantering, och när du skapar ett namnrymd för nycklar via din applikation eller tjänst (vanligtvis med kolon för att dela nyckelnamn) kan du enkelt identifiera data när du migrerar, konverterar eller raderar den. Ett annat vanligt användningsområde för Redis är som en andra datalagring för heta dataobjekt, där det mesta av datan lagras i andra databaser, såsom PostgreSQL eller MongoDB. I dessa användningsfall glömmer utvecklare ofta att radera motsvarande data i Redis när data tas bort från primärlagringen. I detta fall krävs vanligtvis kaskadradering, vilket innebär att alla identifierare för ett specifikt dataobjekt i Redis-konfigurationen sparas genom att en rensare kallas in efter att datan raderats i primärdatabasen för att radera alla relevanta kopior och information. 2. Kontrollera längden på alla nyckelnamn Som vi sa ovan använde vi lämpliga namngivningskonventioner och lade till prefix för att identifiera vart datan går, så detta verkar gå emot det. Glöm dock inte att Redis är en databas i minnet, och ju kortare nycklar, desto mindre utrymme behöver du. Naturligtvis, när det finns miljontals eller miljarder nycklar i en databas, kommer längden på nyckelnamnet att ha stor betydelse. Till exempel, på en 32-bitars Redis-server, om du lagrar en miljon nycklar med en längd på 32 tecken, kommer det att förbruka cirka 96 MB utrymme när du använder ett 6-teckens nyckelnamn, men om du använder ett 12-teckens nyckelnamn ökar platsförbrukningen till cirka 111 MB. Med fler nycklar kommer den extra 15 % överheaden att ha en betydande effekt. 3. Använd rätt datastruktur Oavsett om det gäller minnesanvändning eller prestanda, kan datastrukturer ibland ha stor påverkan, här är några bästa praxis att hänvisa till: Istället för att lagra data som tusentals (eller miljoner) separata strängar, överväg att använda hasschade datastrukturer för att gruppera relaterad data. Hashtabeller är mycket effektiva och kan minska din minnesanvändning; Samtidigt är hashning också mer fördelaktigt för detaljabstraktion och kodläsbarhet. När det är lämpligt, använd lista istället för set. Om du inte behöver använda set-funktionen kan List erbjuda snabbare hastigheter än set med mindre minne. Sorterade mängder är de dyraste datastrukturerna, både vad gäller minnesförbrukning och komplexiteten i grundläggande operationer. Om du bara behöver ett sätt att fråga poster och inte bryr dig om att sortera sådana egenskaper, rekommenderas det starkt att använda hashtabeller. En ofta förbisedd funktion i Redis är bitmaps eller bitsets (efter V2.2). Bitsets tillåter dig att utföra flera bitnivåoperationer på Redis-värden, såsom viss lättviktsanalys. 4. Använd inte nyckeln när du använder SCAN Från och med Redis v2.8 finns redan SCAN-kommandot tillgängligt, vilket gör det möjligt att hämta nycklar från nyckelutrymmet med hjälp av markören. Jämfört med KEYS-kommandot, även om SCAN inte kan returnera alla matchande resultat samtidigt, undviker det den höga risken att blockera systemet, så att vissa operationer kan utföras på huvudnoden. Det är viktigt att notera att SCAN-kommandot är en markörbaserad iterator. Varje gång SCAN-kommandot anropas återlämnas en ny markör till användaren, och användaren måste använda denna nya markör som markörparameter för SCAN-kommandot i nästa iteration för att fortsätta den föregående iterationsprocessen. Samtidigt kan användare med SCAN även justera kommandon med hjälp av nyckelnamnsläge och räkningsalternativ. SCAN-relaterade kommandon inkluderar också SSCAN-kommandon, HSCAN-kommandon och ZSCAN-kommandon, vilka används för samlingar, hashnycklar respektive uppföljare. 5. Använd serverside-Lua-skript I processen att använda Redis ger stödet för Lua-skript utan tvekan utvecklarna en mycket användarvänlig utvecklingsmiljö, vilket i hög grad frigör användarnas kreativitet. När de används korrekt kan Lua-skript ge betydande förbättringar i prestanda och resursanvändning. Istället för att skicka data till CPU:n tillåter skript dig att köra logik närmast datan, vilket minskar nätverkslatens och redundant dataöverföring. I Redis är ett mycket klassiskt användningsfall för Lua datafiltrering eller aggregering av data till en applikation. Genom att kapsla in bearbetningsflödet i ett skript kan du enkelt anropa det för att få ett mindre svar med få resurser på kortare tid. Proffstips:Lua är fantastiskt, men har också vissa problem, som svårigheter att rapportera och hantera buggar. Ett smart tillvägagångssätt är att använda Redis Pub/Sub-funktion och låta skriptet skicka loggmeddelanden över en dedikerad kanal. Skapa sedan en prenumerationsprocess och behandla den därefter.
|