Redis conventions de nommage clés?

Quelle est la convention de nommage normale pour les clés dans redis? J’ai vu des valeurs séparées par : mais je ne suis pas sûr de ce qu’est la convention normale ou pourquoi.

Pour un utilisateur, feriez-vous quelque chose comme …

user:00

si l’ID de l’utilisateur était 00

Êtes-vous en mesure d’interroger uniquement le début de la clé pour renvoyer tous les utilisateurs?

J’espère surtout éviter les problèmes futurs en recherchant les moyens qui fonctionnent pour les gens et pourquoi ils les ont choisis.

Quelle est la convention de nommage normale pour les clés dans redis? J’ai vu des valeurs séparées par: mais je ne suis pas sûr de ce qu’est la convention normale ou pourquoi.

Oui, le signe deux-points : est une convention lors du nommage des clés. Dans ce tutoriel sur le site Web de redis, il est écrit: Essayez de vous en tenir à un schéma. Par exemple “object-type: id: field” peut être une bonne idée, comme dans “user: 1000: password”. J’aime utiliser des points pour les champs multi-mots, comme dans “comment: 1234: reply.to”.

Êtes-vous en mesure d’interroger uniquement le début de la clé pour renvoyer tous les utilisateurs?

Si vous voulez dire quelque chose comme interroger directement toutes les clés commençant par user: il y a une commande keys pour cela. Cette commande ne doit cependant être utilisée que pour le débogage, car elle est O (N) car elle recherche toutes les clés stockées dans la firebase database.

Une solution plus appropriée à ce problème consiste à créer une clé dédiée, nommons les users , qui stockeront toutes les clés des utilisateurs, par exemple, dans la liste ou la structure de données définie .

Nous utilisons un signe deux-points (:) comme séparateur d’espace de nom et un hachage (#) pour les parties-clés des clés, par exemple:

 logistics:building#23 

Une convention semble être deux-points (:) mais je suis un développeur web, donc je préfère personnellement slash (/) pour le séparateur. Slash est déjà un séparateur si important dans les URL qui sont censées être des localisateurs de ressources uniformes, donc des types de clés pour les ressources. Pourquoi adopter une approche différente avec le côlon (:)? Est-ce que ça aide quelque chose?

Considérez cet exemple:

Nous avons une API RESTful pour les objects jouets. Il y en a un:

 http://example.com/api/toy/234 

Où nous l’avons stocké? Nous utilisons Redis et des barres obliques afin que la clé soit évidente:

 toy/234 

C’est la clé unique pour le jouet. La clé peut maintenant être utilisée également du côté client:

 { key: "toy/234", color: "red", url: function () { return API_BASE_URL + this.key; } } 

Un utilisateur demande un object avec la clé toy/666 . Comment l’obtenir de Redis? Un exemple lié à Node.js:

 redis.get(key, function reply_callback(error, toyssortingng) { var toy = JSON.parse(toyssortingng); ... } 

Pas besoin de convertir les barres obliques en deux points et vice versa. Pratique, vous ne pensez pas?

Remarque: assurez-vous toujours que l’utilisateur ne peut accéder qu’à ce que vous avez prévu. L’approche de l’URL brut vers la clé ci-dessus permet également d’extraire l’ user/1/password de user/1/password , comme l’ont noté les commentateurs. Cela ne devrait pas poser de problème si vous utilisez Redis en tant que cache public en lecture seule.

Je ne sais pas s’il existe déjà des “meilleures pratiques” pour la dénomination des clés Redis.

J’ai expérimenté l’utilisation de caractères NUL ASCII comme séparateurs (puisque Redis et Python sont tous deux propres à 8 bits). Il semble un peu moche si vous regardez les clés brutes, mais l’idée est de le cacher derrière une couche d’abstraction. Les deux points et les symboles de tuyau sont des alternatives évidentes tant que les composants de votre espace de nom sont garantis de ne pas les utiliser ou que vous souhaitez encoder chaque composant selon vos besoins. Cependant, si vous les encodiez, vous devriez développer la couche d’abstraction et éviter de voir les clés brutes de toute façon … ce qui m’a amené à utiliser \ 0 dans mon raisonnement.

Je serai intéressant de voir si d’autres opinions sont exprimées à ce sujet.