|
Sviluppare applicazioni con Redis è un processo piacevole, ma come per qualsiasi tecnologia, ci sono alcune cose da tenere a mente quando si progettano applicazioni basate su Redis. Forse conoscevi già tutta la routine dello sviluppo di database relazionali, e lo sviluppo di applicazioni basato su Redis presenta molte somiglianze, ma bisogna tenere a mente le seguenti due cose: Redis è un database in memoria ed è single-thread. Pertanto, quando si utilizza Redis, bisogna prestare attenzione ai seguenti punti: 1. Controlla tutte le chiavi memorizzate in Redis La funzione principale di un database è memorizzare dati, ma è normale che gli sviluppatori ignorino alcuni dati memorizzati nel database a causa di cambiamenti nei requisiti dell'applicazione o nei metodi di utilizzo dei dati, e lo stesso vale per Redis. Potresti trascurare alcune chiavi che scadono, oppure potresti dimenticare i dati perché un modulo della tua applicazione è obsoleto. In entrambi i casi, Redis memorizza alcuni dati che non sono più in uso, occupando spazio senza motivo. Il pattern dati debolmente strutturato di Redis rende difficile capire cosa viene memorizzato centralmente a meno che non si usi una nomenclatura molto matura per le chiavi. Usare il metodo di denominazione giusto semplificherà la gestione del database, e quando crei uno spazio dei nomi per le chiavi tramite la tua applicazione o servizio (di solito usando i due punti per dividere i nomi delle chiavi), puoi facilmente identificare i dati durante la migrazione, la conversione o la cancellazione. Un altro caso d'uso comune di Redis è come secondo archivio dati per elementi hot data, dove la maggior parte dei dati è memorizzata in altri database, come PostgreSQL o MongoDB. In questi casi d'uso, gli sviluppatori spesso dimenticano di eliminare i dati corrispondenti in Redis quando i dati vengono rimossi dall'archiviazione primaria. In questo caso, è solitamente necessaria la cancellazione a cascata, nel qual caso può essere ottenuta salvando tutti gli identificatori per un elemento di dato specifico nella configurazione Redis, in modo da garantire che, dopo l'eliminazione dei dati nel database primario, venga chiamato un pulitore per eliminare tutte le copie e le informazioni rilevanti. 2. Controlla la lunghezza di tutti i nomi chiave Come abbiamo detto sopra, abbiamo usato convenzioni di denominazione appropriate e aggiunto prefissi per identificare dove vanno i dati, quindi questo sembra andare contro questa idea. Tuttavia, non dimenticare che Redis è un database in memoria, e più le chiavi sono brevi, meno spazio serve. Naturalmente, quando ci sono milioni o miliardi di chiavi in un database, la lunghezza del nome della chiave avrà un grande impatto. Ad esempio, su un server Redis a 32 bit, se memorizzi un milione di chiavi con una lunghezza di 32 caratteri, consumerà circa 96MB di spazio usando un nome chiave di 6 caratteri, ma se usi un nome chiave da 12 caratteri, il consumo di spazio aumenterà a circa 111MB. Con più chiavi, il 15% aggiuntivo di overhead avrà un impatto significativo. 3. Utilizzare la giusta struttura dati Che si tratti di utilizzo o prestazioni di memoria, a volte le strutture dati possono avere un grande impatto, ecco alcune best practice a cui fare riferimento: Invece di memorizzare i dati come migliaia (o milioni) di stringhe separate, considera di usare strutture dati hashate per raggruppare i dati correlati. Le tabelle hash sono molto efficienti e possono ridurre il consumo di memoria; Allo stesso tempo, l'hashing è anche più vantaggioso per l'astrazione dei dettagli e la leggibilità del codice. Quando opportuno, usa lista invece di set. Se non è necessario usare la funzione set, List può offrire velocità più elevate rispetto a set utilizzando meno memoria. Gli insiemi ordinati sono le strutture dati più costose, sia in termini di consumo di memoria sia per la complessità delle operazioni di base. Se hai solo bisogno di un modo per interrogare i record e non ti interessa ordinare tali proprietà, allora è altamente consigliato usare le tabelle hash. Una caratteristica spesso trascurata in Redis sono le bitmap o i bitset (dopo la versione 2.2). I bitset permettono di eseguire più operazioni a livello di bit sui valori Ridis, come alcune analisi leggere. 4. Non usare la chiave quando si utilizza SCAN A partire da Redis v2.8, il comando SCAN è già disponibile, che permette di recuperare le chiavi dallo spazio dei tasti usando il cursore. Rispetto al comando KEYS, sebbene SCAN non possa restituire tutti i risultati corrispondenti contemporaneamente, evita l'alto rischio di bloccare il sistema, così che alcune operazioni possano essere eseguite sul nodo master. È importante notare che il comando SCAN è un iteratore basato sul cursore. Ogni volta che viene chiamato il comando SCAN, un nuovo cursore verrà restituito all'utente, e quest'ultimo dovrà usare questo nuovo cursore come parametro del cursore del comando SCAN nella prossima iterazione, per continuare il processo di iterazione precedente. Allo stesso tempo, con SCAN, gli utenti possono anche regolare i comandi usando la modalità dei nomi chiave e le opzioni di conteggio. I comandi correlati alla scansione includono anche comandi SSCAN, comandi HSCAN e comandi ZSCAN, utilizzati rispettivamente per collezioni, chiavi hash e sequel. 5. Utilizzare script Lua lato server Nel processo di utilizzo di Redis, il supporto agli script Lua offre senza dubbio agli sviluppatori un ambiente di sviluppo molto amichevole, liberando così notevolmente la creatività degli utenti. Se usati correttamente, gli script Lua possono portare miglioramenti significativi nelle prestazioni e nel consumo di risorse. Invece di passare i dati alla CPU, gli script permettono di eseguire la logica più vicina ai dati, riducendo la latenza di rete e il trasferimento di dati ridondanti. In Redis, un caso d'uso molto classico per Lua è il filtraggio o aggregazione dei dati in un'applicazione. Incapsulando il flusso di lavoro di elaborazione in uno script, puoi semplicemente chiamarlo per ottenere una risposta più breve usando poche risorse in meno tempo. Consiglio da esperto:Lua è ottimo, ma ha anche alcuni problemi, come la difficoltà a segnalare e gestire bug. Un approccio intelligente è usare la funzione Pub/Sub di Redis e lasciare che lo script invii i messaggi di log su un canale dedicato. Poi crea un processo per l'abbonato e lo gestisci di conseguenza.
|