Il popolare motore di archiviazione Redis è uno strumento eccellente e indispensabile nell'arsenale di qualsiasi sviluppatore di software. Il motore di archiviazione in memoria consente l'archiviazione e il recupero dei dati incredibilmente veloci, fino a 32 milioni di query al secondo, rendendolo un complemento ideale per qualsiasi motore di database principale.
Immergiamoci e impariamo come velocizzare le nostre operazioni online.
Redis: pro e contro
Il più grande vantaggio di Redis è che si tratta di un archivio dati puramente in memoria , il che significa che è incredibilmente veloce poiché il database è archiviato nella RAM, quindi non sono necessarie operazioni di I/O sui file sul disco rigido.
Altri vantaggi aggiuntivi sono la sua semplicità, il supporto del clustering tramite Redis-cluster, oltre al supporto per otto diversi tipi di dati che forniscono la flessibilità necessaria per archiviare e gestire i dati secondo necessità.
Tuttavia, il suo più grande svantaggio è anche il fatto che è puramente un archivio dati in memoria, quindi presenta limitazioni di dimensioni. Dipende dall'infrastruttura del tuo server, ma per motivi di semplicità e di questo articolo, il tuo database Redis tipico conterrà solo un massimo di 2-4 GB di dati.
Ciò significa che Redis viene utilizzato per completare i motori di database comunemente utilizzati come mySQL, PostgreSQL e MongoDB e non è inteso come un sostituto. Gli usi principali di Redis includono una cache, dati temporanei/recenti che scadranno in un breve periodo di tempo o piccoli pezzi di dati a cui si accede di frequente.
Come installare Redis
Supponendo che tu stia eseguendo Ubuntu o qualsiasi distribuzione Linux che contenga il comando apt-get , per installare Redis è sufficiente eseguire il seguente comando nel terminale:
sudo apt-get install redis-server
Quindi, controlla che Redis sia stato installato correttamente. All'interno del terminale, esegui il comando:
redis-cli --version
Questo dovrebbe stampare la versione di Redis che stai utilizzando e, supponendo che sia così, esegui il seguente comando per connetterti a Redis:
redis-cli
Questo ti darà un prompt Redis non standard all'interno del terminale, che assomiglia a:
127.0.0.1:6379>
Comandi stringa
Ogni voce in Redis è identificata da una chiave, che può essere qualsiasi stringa non di spazi bianchi desiderata. Le stringhe contengono solo un singolo valore e, ad esempio, eseguire i seguenti comandi al prompt di Redis per impostare un valore su un paio di chiavi.
127.0.0.1:6379> set full_name "John Doe" 127.0.0.1:6379> set units 5
Ora puoi elencare tutte le chiavi attualmente all'interno del database Redis con il comando keys.
127.0.0.1:6379> keys *
Ciò comporterà la visualizzazione delle due chiavi precedentemente impostate, full_name e units . Puoi vedere il valore di queste chiavi con il comando get.
127.0.0.1:6379> get full_name "John Doe" 127.0.0.1:6379> get units 5
L'eliminazione delle chiavi può essere facilmente eseguita con il comando del.
127.0.0.1:6379> del full_name
È anche possibile incrementare rapidamente un numero intero con il comando hincrby . Quanto segue incrementerà il tasto "unità" da 5 a 7.
127.0.0.1:6379> incrby units 2
Elenco comandi
Gli elenchi in Redis sono array unidimensionali con un ordine specifico e consentono elementi duplicati in diverse posizioni dell'elenco. Gli elementi possono essere aggiunti a sinistra oa destra di un elenco con i comandi lpush e rpush .
127.0.0.1:6379> lpush colors blue 127.0.0.1:6379> rpush colors red yellow green
Come puoi vedere dall'esempio sopra, puoi inserire più elementi in un elenco all'interno di un singolo comando. Ora possiamo visualizzare tutti gli elementi nell'elenco utilizzando il comando lrange .
127.0.0.1:6379> lrange colors 0 -1
Ci sono due numeri interi alla fine del comando, il primo che definisce la posizione all'interno dell'elenco da cui iniziare, e il secondo è il numero di elementi da restituire con -1 che significa tutti gli elementi. Il risultato del comando precedente sarà, blu, rosso, giallo, verde .
Puoi anche rimuovere elementi da entrambe le estremità di un elenco usando i comandi lpop e rpop .
127.0.0.1:6379> lpop colors blue 127.0.0.1:6379> rpop colors green
Puoi anche ottenere il numero di elementi in una lista con il comando llen .
127.0.0.1:6379> llen colors (integer) 2
Infine, puoi rimuovere un elemento da un elenco tramite il comando lrem .
127.0.0.1:6379> lrem colors 1 green (integer) 1
Il comando lrem inizia con il nome dell'elenco, seguito dal numero di occorrenze da rimuovere e dal nome dell'elemento da rimuovere. Restituirà il numero di occorrenze trovate e rimosse dall'elenco.
Comandi hash
Uno dei tipi di dati più diffusi in Redis sono gli hash, che consentono di archiviare più coppie chiave-valore all'interno di una singola voce. La chiave non deve già esistere e puoi definire le coppie chiave-valore in qualsiasi momento con il comando hset .
127.0.0.1:6379> hset user:581 full_name "Jane Doe" 127.0.0.1:6379> hset user:581 points 500
Puoi anche definire più coppie chiave-valore di un hash all'interno di un singolo comando utilizzando il comando hmset .
127.0.0.1:6379> hmset user:581 email [email protected] gender F
L'hash identificato dall'utente chiave :581 ora ha un totale di quattro coppie chiave-valore, che possono essere facilmente recuperate con il comando hgetall .
127.0.0.1:6379> hgetall user:581 1) "full_name" 2) "Jane Doe" 3) "points" 4) "500" 5) "email" 6) "[email protected]" 7) "gender" 8) "F"
Puoi anche ottenere il valore di una singola coppia chiave-valore all'interno di un hash utilizzando il comando get .
127.0.0.1:6379> hget user:581 email "[email protected]"
Per qualsiasi numero intero all'interno dell'hash, puoi incrementarli di una quantità specificata con il comando code hincrby .
127.0.0.1:6379> hincrby user:581 points 20 (integer) 520
Il valore della chiave punti all'interno dell'hash è stato ora incrementato da 20 a 520. Una singola coppia chiave-valore all'interno di un hash può essere eliminata con il comando hdel .
127.0.0.1:6379> hdel user:581 gender
In alternativa, puoi anche eliminare completamente un hash che include tutte le coppie chiave-valore utilizzando il comando del .
127.0.0.1:6379> del user:581
Chiavi Redis in scadenza
Un'altra eccellente caratteristica di Redis è la possibilità di far scadere automaticamente le chiavi dopo un numero definito di secondi utilizzando il comando scade . Tieni presente che puoi far scadere solo chiavi complete e non singoli elementi all'interno di un elenco o di un hash. Per esempio:
127.0.0.1:6379> expire full_name 10
Questo imposterà un tempo di scadenza di 10 secondi sulla chiave full_name che hai creato nella sezione delle stringhe. Dopo aver eseguito il comando precedente, attendi 10 secondi, quindi prova a recuperare nuovamente il valore della chiave.
127.0.0.1:6379> get full_name (nil)
Come previsto, la chiave è scaduta, quindi otteniamo null come risultato.
Connettiti a Redis con PHP
Ora che hai imparato le basi su come archiviare e recuperare i dati con Redis, è il momento di collegarli al tuo software. Tutti i linguaggi di programmazione hanno moduli/estensioni per Redis, ma per questo esempio utilizzeremo PHP.
Devi prima installare l'estensione PHP-Redis poiché non è installata per impostazione predefinita. All'interno del terminale, esegui il comando.
sudo apt-get install php-redis
Una volta installato, assicurati di riavviare PHP-fpm in modo che l'estensione sia caricata correttamente. Ecco del codice PHP che si connette e si interfaccia con Redis.
<> // Connect to redis $conn = new redis(); try { $conn->connect('127.0.0.1', 6379, 5); } catch (RedisException $e) { die("Unable to connect to redis"); } // Set string $conn->set('country', 'Canada'); // Get string $value = $conn->get('country'); echo "Country is: $value "; // Define a profile $profile = [ 'username' => 'mike', 'full_name' => 'Mike Smith', 'email' => '[email protected]', 'country' => 'Australia' ]; // Create a hash $conn->hmset('user:188', $profile); // Get all values of the profile hash $values = $conn->hgetall('user:188'); print_r($values); // Get only the e-mail address $email = $conn->hget('user:188', 'email'); echo "E-mail is: $email "; // Expire the hash in 15 seconds $conn->expire('user:188', 15);
Il codice di esempio sopra dovrebbe essere abbastanza semplice. Si connette prima a Redis con un timeout di 5 secondi, quindi procede a impostare e ottenere una stringa e un hash. Tutti i comandi Redis possono essere eseguiti tramite OOP chiamandoli direttamente dall'oggetto Redis come nell'esempio sopra.
Sei sulla buona strada!
Congratulazioni, hai imparato le basi su come archiviare e recuperare i dati a una velocità incredibile tramite il motore di archiviazione Redis, incluso come connetterti e interfacciarti con Redis utilizzando PHP.
Tieni presente che questo articolo copre solo le nozioni di base e la pagina Tipi di dati di Redis della documentazione è un ottimo posto per continuare a esplorare Redis e tutte le sue funzionalità.