Redis memorizza le chiavi che puntano ai valori. Le chiavi possono avere qualsiasi valore binario fino a dimensioni ragionevoli (si consiglia di utilizzare stringhe ASCII brevi per motivi di leggibilità e debug). I valori sono uno dei cinque tipi di dati Redis nativi.
1.strings - una sequenza di byte binari sicuri fino a 512 MB
2.hashes - una raccolta di coppie chiave-valore
3.lists - una raccolta di stringhe in ordine di inserimento
4.set - una raccolta di stringhe uniche senza ordinamento
5.sorted sets: una raccolta di stringhe uniche ordinate per punteggio definito dall'utente
stringhe
Una stringa Redis è una sequenza di byte.
Le stringhe in Redis sono binarie sicure (nel senso che hanno una lunghezza nota non determinata da alcun carattere di terminazione speciale), quindi puoi archiviare fino a 512 megabyte in una stringa.
Le stringhe sono il concetto di "archivio valori chiave". Hai una chiave che punta a un valore, in cui sia la chiave che il valore sono stringhe di testo o binarie.
Per tutte le possibili operazioni sulle stringhe, consultare il
http://redis.io/commands/#string
hash
Un hash Redis è una raccolta di coppie chiave-valore.
Un hash Redis contiene molte coppie di valori chiave, in cui ogni chiave e valore è una stringa. Gli hash Redis non supportano direttamente valori complessi (nel senso che non è possibile che un campo hash abbia un valore di un elenco o set o un altro hash), ma è possibile utilizzare i campi hash per puntare ad altri valori complessi di livello superiore. L'unica operazione speciale che puoi eseguire sui valori del campo hash è l'incremento / decremento atomico dei contenuti numerici.
Puoi pensare a un hash Redis in due modi: come una rappresentazione diretta dell'oggetto e come un modo per memorizzare molti piccoli valori in modo compatto.
Le rappresentazioni dirette di oggetti sono semplici da capire. Gli oggetti hanno un nome (la chiave dell'hash) e una raccolta di chiavi interne con valori. Vedi l'esempio sotto per, beh, un esempio.
Memorizzare molti piccoli valori usando un hash è un'ingegnosa tecnica di archiviazione dei dati di Redis. Quando un hash ha un piccolo numero di campi (~ 100), Redis ottimizza l'archiviazione e l'efficacia dell'accesso dell'intero hash. La piccola ottimizzazione dell'archiviazione hash di Redis genera un comportamento interessante: è più efficiente avere 100 hash ciascuno con 100 chiavi e valori interni anziché avere 10.000 chiavi di livello superiore che puntano a valori di stringa. L'uso degli hash Redis per ottimizzare l'archiviazione dei dati in questo modo richiede un sovraccarico di programmazione aggiuntivo per il tracciamento in cui finiscono i dati, ma se l'archiviazione dei dati è basata principalmente su stringhe, è possibile risparmiare un sacco di overhead di memoria usando questo strano trucco.
Per tutte le possibili operazioni sugli hash, consultare i documenti hash
elenchi
Le liste Redis si comportano come liste collegate.
È possibile inserire, eliminare da e attraversare elenchi dalla testa o dalla coda di un elenco.
Utilizzare gli elenchi quando è necessario mantenere i valori nell'ordine in cui sono stati inseriti. (Redis ti dà la possibilità di inserire in qualsiasi posizione di elenco arbitraria se necessario, ma le prestazioni di inserimento peggioreranno se inserisci lontano dalla posizione iniziale.)
Gli elenchi Redis sono spesso utilizzati come code produttore / consumatore. Inserisci gli elementi in un elenco, quindi pop gli elementi dall'elenco. Cosa succede se i tuoi consumatori provano ad apparire da un elenco senza elementi? Puoi chiedere a Redis di attendere che appaia un elemento e di restituirlo immediatamente quando viene aggiunto. Questo trasforma Redis in un sistema di code / eventi / lavori / compiti / notifiche in tempo reale.
Puoi rimuovere atomicamente gli elementi da una delle estremità di un elenco, consentendo a qualsiasi elenco di essere trattato come uno stack o una coda.
Puoi anche mantenere elenchi a lunghezza fissa (raccolte limitate) tagliando l'elenco a una dimensione specifica dopo ogni inserimento.
Per tutte le possibili operazioni sugli elenchi, consultare i documenti degli elenchi
Imposta
I set di Redis sono, beh, set.
Un set Redis contiene stringhe Redis uniche non ordinate in cui ogni stringa esiste una sola volta per set. Se aggiungi lo stesso elemento dieci volte a un set, verrà visualizzato solo una volta. I set sono fantastici per garantire pigramente che qualcosa esista almeno una volta senza preoccuparsi degli elementi duplicati che accumulano e sprecano spazio. Puoi aggiungere la stessa stringa tutte le volte che vuoi senza bisogno di verificare se esiste già.
I set sono veloci per il controllo dell'iscrizione, l'inserimento e l'eliminazione dei membri nel set.
I set hanno operazioni di set efficienti, come ci si aspetterebbe. Puoi prendere l'unione, l'intersezione e la differenza di più insiemi contemporaneamente. I risultati possono essere restituiti al chiamante oppure i risultati possono essere memorizzati in un nuovo set per un uso successivo.
I set hanno accesso a tempo costante per i controlli di appartenenza (a differenza degli elenchi) e Redis ha anche una comoda rimozione e restituzione dei membri casuali ("pop un elemento casuale dal set") o dei membri casuali che ritornano senza sostituzione ("dammi 30 utenti unici casuali) ") o con sostituzione (" dammi 7 carte, ma dopo ogni selezione, rimetti la carta in modo che possa essere nuovamente campionata ").
Per tutte le possibili operazioni sui set, consultare la documentazione dei set .
Set ordinati
Gli insiemi ordinati Redis sono insiemi con un ordine definito dall'utente.
Per semplicità, puoi pensare a un set ordinato come un albero binario con elementi unici. (I set ordinati Redis sono in realtà salta elenchi .) L'ordinamento degli elementi è definito dal punteggio di ciascun elemento.
Gli insiemi ordinati sono ancora insiemi. Gli elementi possono apparire solo una volta in un set. Un elemento, a fini di unicità, è definito dal suo contenuto di stringa. Inserendo l'elemento "mela" con il punteggio di ordinamento 3, quindi inserendo l'elemento "mela" con il punteggio di ordinamento 500 si ottiene un elemento "mela" con il punteggio di ordinamento 500 nel set ordinato. Gli insiemi sono univoci solo in base a Dati, non in base a coppie (Punteggio, Dati).
Assicurati che il tuo modello di dati si basi sul contenuto della stringa e non sul punteggio dell'elemento per unicità. I punteggi possono essere ripetuti (o addirittura zero), ma, un'ultima volta, gli elementi del set possono esistere solo una volta per set ordinato. Ad esempio, se si tenta di memorizzare la cronologia di ogni accesso utente come un set ordinato impostando il punteggio nell'epoca dell'accesso e il valore dell'ID utente, si finirà per memorizzare solo l'ultima epoca dell'accesso per tutti i propri utenti. Il set aumenterebbe fino alla dimensione della base utente e non alla dimensione desiderata per l'accesso alla base utente *.
Gli elementi vengono aggiunti al tuo set con punteggi. Puoi aggiornare il punteggio di qualsiasi elemento in qualsiasi momento, basta aggiungere nuovamente l'elemento con un nuovo punteggio. I punteggi sono rappresentati da doppie in virgola mobile, quindi è possibile specificare la granularità di timestamp di alta precisione, se necessario. Più elementi possono avere lo stesso punteggio.
Puoi recuperare elementi in diversi modi. Poiché tutto è ordinato, puoi chiedere elementi a partire dal punteggio più basso. Puoi chiedere elementi a partire dal punteggio più alto ("al contrario"). Puoi richiedere gli elementi in base al loro punteggio di ordinamento in ordine naturale o inverso.
Per tutte le possibili operazioni sui set ordinati, consultare la documentazione relativa ai set ordinati.