Redis stocke les clés pointant vers des valeurs. Les clés peuvent avoir n'importe quelle valeur binaire jusqu'à une taille raisonnable (l'utilisation de courtes chaînes ASCII est recommandée à des fins de lisibilité et de débogage). Les valeurs sont l'un des cinq types de données Redis natifs.
1. chaînes - une séquence d'octets sécurisés binaires jusqu'à 512 Mo
2. hashes - une collection de paires de valeurs clés
3. listes - une collection de chaînes dans l'ordre d'insertion
4. ensembles - une collection de chaînes uniques sans commande
5. ensembles triés - une collection de chaînes uniques triées par score défini par l'utilisateur
Cordes
Une chaîne Redis est une séquence d'octets.
Les chaînes de Redis sont binaires (ce qui signifie qu'elles ont une longueur connue non déterminée par des caractères de terminaison spéciaux), vous pouvez donc stocker n'importe quoi jusqu'à 512 mégaoctets dans une chaîne.
Les cordes sont le concept canonique de «magasin de valeur clé». Vous avez une clé pointant vers une valeur, où clé et valeur sont du texte ou des chaînes binaires.
Pour toutes les opérations possibles sur les chaînes, consultez le
http://redis.io/commands/#string
Hashs
Un hachage Redis est une collection de paires de valeurs clés.
Un hachage Redis contient de nombreuses paires de valeurs clés, où chaque clé et valeur est une chaîne. Les hachages Redis ne prennent pas directement en charge les valeurs complexes (ce qui signifie que vous ne pouvez pas avoir un champ de hachage avoir une valeur d'une liste ou d'un ensemble ou un autre hachage), mais vous pouvez utiliser des champs de hachage pour pointer vers d'autres valeurs complexes de niveau supérieur. La seule opération spéciale que vous pouvez effectuer sur les valeurs de champ de hachage est l'incrémentation / décrémentation atomique du contenu numérique.
Vous pouvez penser à un hachage Redis de deux manières: comme une représentation d'objet directe et comme un moyen de stocker de nombreuses petites valeurs de manière compacte.
Les représentations d'objets directs sont simples à comprendre. Les objets ont un nom (la clé du hachage) et une collection de clés internes avec des valeurs. Voir l'exemple ci-dessous pour, bien, un exemple.
Le stockage de nombreuses petites valeurs à l'aide d'un hachage est une technique intelligente de stockage de données massives de Redis. Lorsqu'un hachage a un petit nombre de champs (~ 100), Redis optimise le stockage et l'efficacité d'accès de tout le hachage. L'optimisation du stockage de petit hachage de Redis soulève un comportement intéressant: il est plus efficace d'avoir 100 hachages chacun avec 100 clés et valeurs internes plutôt que d'avoir 10 000 clés de niveau supérieur pointant vers des valeurs de chaîne. L'utilisation de hachages Redis pour optimiser votre stockage de données de cette façon nécessite une surcharge de programmation supplémentaire pour suivre où les données finissent, mais si votre stockage de données est principalement basé sur des chaînes, vous pouvez économiser beaucoup de mémoire en utilisant cette astuce étrange.
Pour toutes les opérations possibles sur les hachages, voir les documents de hachage
Listes
Les listes Redis agissent comme des listes liées.
Vous pouvez insérer, supprimer et parcourir des listes à partir de la tête ou de la fin d'une liste.
Utilisez des listes lorsque vous devez conserver les valeurs dans l'ordre où elles ont été insérées. (Redis vous donne la possibilité d'insérer dans n'importe quelle position de liste arbitraire si vous en avez besoin, mais vos performances d'insertion se dégraderont si vous insérez loin de votre position de départ.)
Les listes Redis sont souvent utilisées comme files d'attente des producteurs / consommateurs. Insérez des éléments dans une liste, puis faites apparaître des éléments de la liste. Que se passe-t-il si vos consommateurs essaient de sortir d'une liste sans éléments? Vous pouvez demander à Redis d'attendre qu'un élément apparaisse et de vous le renvoyer immédiatement lorsqu'il est ajouté. Cela transforme Redis en un système de file d'attente de messages / événements / tâches / tâches / notifications en temps réel.
Vous pouvez supprimer de manière atomique des éléments à l'une ou l'autre des extrémités d'une liste, permettant à toute liste d'être traitée comme une pile ou une file d'attente.
Vous pouvez également gérer des listes de longueur fixe (collections plafonnées) en réduisant votre liste à une taille spécifique après chaque insertion.
Pour toutes les opérations possibles sur les listes, voir la documentation des listes
Ensembles
Les ensembles Redis sont, enfin, des ensembles.
Un ensemble Redis contient des chaînes Redis uniques non ordonnées où chaque chaîne n'existe qu'une fois par ensemble. Si vous ajoutez le même élément dix fois à un ensemble, il n'apparaîtra qu'une seule fois. Les ensembles sont parfaits pour s'assurer que quelque chose existe paresseusement au moins une fois sans se soucier des éléments en double accumulant et gaspillant de l'espace. Vous pouvez ajouter la même chaîne autant de fois que vous le souhaitez sans avoir besoin de vérifier si elle existe déjà.
Les ensembles sont rapides pour la vérification d'appartenance, l'insertion et la suppression de membres dans l'ensemble.
Les ensembles ont des opérations d'ensemble efficaces, comme vous vous en doutez. Vous pouvez prendre l'union, l'intersection et la différence de plusieurs ensembles à la fois. Les résultats peuvent être renvoyés à l'appelant ou les résultats peuvent être stockés dans un nouvel ensemble pour une utilisation ultérieure.
Les ensembles ont un accès à temps constant pour les vérifications d'appartenance (contrairement aux listes), et Redis a même la suppression et le retour des membres aléatoires ("pop un élément aléatoire de l'ensemble") ou les membres aléatoires retournant sans remplacement ("donnez-moi 30 utilisateurs uniques aléatoires) ") ou avec remplacement (" donnez-moi 7 cartes, mais après chaque sélection, remettez la carte afin qu'elle puisse éventuellement être échantillonnée à nouveau ").
Pour toutes les opérations possibles sur les ensembles, consultez la documentation des ensembles .
Ensembles triés
Les ensembles triés Redis sont des ensembles dont l'ordre est défini par l'utilisateur.
Pour simplifier, vous pouvez considérer un ensemble trié comme un arbre binaire avec des éléments uniques. (Les ensembles triés Redis sont en fait des listes à ignorer .) L'ordre de tri des éléments est défini par le score de chaque élément.
Les ensembles triés sont toujours des ensembles. Les éléments ne peuvent apparaître qu'une seule fois dans un ensemble. Un élément, à des fins d'unicité, est défini par son contenu de chaîne. L'insertion de l'élément "pomme" avec le score de tri 3, puis l'insertion de l'élément "pomme" avec le score de tri 500 entraîne un élément "pomme" avec le score de tri 500 dans votre ensemble trié. Les ensembles ne sont uniques qu'en fonction des données, et non en fonction des paires (score, données).
Assurez-vous que votre modèle de données repose sur le contenu de la chaîne et non sur le score de l'élément pour l'unicité. Les scores peuvent être répétés (ou même zéro), mais, une dernière fois, les éléments d'ensemble ne peuvent exister qu'une seule fois par ensemble trié. Par exemple, si vous essayez de stocker l'historique de chaque connexion utilisateur sous la forme d'un ensemble trié en faisant du score l'époque de la connexion et la valeur de l'ID utilisateur, vous finirez par stocker uniquement la dernière époque de connexion pour tous vos utilisateurs. Votre ensemble atteindrait la taille de votre base d'utilisateurs et non la taille souhaitée de vos connexions à la base d'utilisateurs *.
Des éléments sont ajoutés à votre ensemble avec des scores. Vous pouvez mettre à jour le score de n'importe quel élément à tout moment, il suffit d'ajouter à nouveau l'élément avec un nouveau score. Les scores sont représentés par des doubles à virgule flottante, vous pouvez donc spécifier la granularité des horodatages de haute précision si nécessaire. Plusieurs éléments peuvent avoir le même score.
Vous pouvez récupérer des éléments de différentes manières. Puisque tout est trié, vous pouvez demander des éléments commençant par les scores les plus bas. Vous pouvez demander des éléments en commençant par les scores les plus élevés ("à l'envers"). Vous pouvez demander des éléments par leur score de tri dans l'ordre naturel ou inverse.
Pour toutes les opérations possibles sur les ensembles triés, consultez la documentation des ensembles triés.