Comment créer une application simple avec Redis Cloud et Node.js

Comment créer une application simple avec Redis Cloud et Node.js

Parfois, je « pense » dans Redis. C’est un peu difficile à décrire, mais j’ai tendance à penser aux problèmes de la vie réelle en termes de comment je les résoudrais dans Redis (je… pense que ça pourrait être une maladie). Je rénove ma maison depuis quelques années maintenant et l’un des défis les plus inattendus est le temps qu’il faut pour plâtrer, peindre, appliquer de l’adhésif et autres pour sécher et durcir. Certaines choses prennent des semaines à guérir avant de pouvoir passer à l’étape suivante. J’ai eu un petit désagrément/désastre ce week-end et je me suis dit que je n’allais pas laisser ça se reproduire. Alors… c’est parti pour Redis pour faire un speedrun d’application.

Dans cet article, je vais créer une petite application qui utilise Node.js et Cloud d’entreprise Redis pour savoir quand les choses sont « sèches » ou durcies. Vous pouvez enregistrer quand vous avez appliqué de la “peinture” (nous l’utilisons simplement comme un “matériau” général mais cela peut être n’importe quoi) et cela ne vous laissera pas peindre à nouveau si ce n’est pas sec. Enfin, vous pouvez également vérifier l’état d’une couche de peinture en découvrant combien de temps il lui reste. Je sais, c’est élégant, mais bien trop conçu – j’aurai un financement de capital-risque en un rien de temps !

Tout d’abord, obtenez une petite instance Redis. Redis Enterprise Cloud est idéal pour cela car ils vous offrent une instance gratuite de 30 Mo aussi longtemps que vous l’utilisez. Je suggère de lire la configuration rapide de Redis Enterprise Cloud – il vous guidera tout au long du processus en détail. J’estime que chaque couche de peinture et toutes les clés qui y sont associées dans Redis occuperont environ 300 octets. Ainsi, l’instance gratuite peut facilement gérer environ 100 000 pièces, ce qui est assez grand pour ma maison.

Après votre inscription, vous devriez avoir un port, un hôte et un mot de passe. Vous pouvez les utiliser pour créer un petit fichier JSON. Nous l’utiliserons pour indiquer au script Node.js vos informations d’identification et votre nom d’hôte. Gardez à l’esprit que tout cela est privé, alors ne le mettez pas dans votre dossier de projet (trop facile de le télécharger accidentellement sur github ou quelque chose). Voici un exemple de la façon dont le fichier JSON doit être structuré :

Maintenant, créons un nouveau répertoire, initialisons npm et chargeons quelques dépendances.

Passons en revue les trois dépendances :

Avant de plonger, regardons la théorie de ce que nous allons faire. Pour obtenir la fonctionnalité décrite ci-dessus, nous n’avons besoin que d’une poignée de commandes. Nous avons deux opérations d’application – peinture pour appliquer une couche de peinture et readytopaint pour vérifier si vous êtes prêt à peindre. Ces deux opérations nécessitent deux commandes ensemble d’une manière qui dépend de la séquence, nous utiliserons un MULTI/EXEC bloquer.

Regardons d’abord l’opération de peinture. Nous pouvons réaliser cette opération avec les commandes Redis de SADD (set add) et POSITIONNER. SADD suivra si une salle existe sur le long terme (plus à ce sujet plus tard) et activera plusieurs utilisateurs. Je vous ai prévenu que c’était trop conçu. La clé de la clé de type de données set est structurée comme rooms:userid, dans ce cas, l’userid peut être n’importe quoi. Le membre est le nom de la pièce que vous peignez. La deuxième opération est une commande SET, mais avec des arguments inhabituels. La clé est structurée pour inclure à la fois l’ID utilisateur et la pièce et ressemble à paint:userid:room. Le premier argument est la valeur – ici, nous ne nous soucions pas de la valeur (nous la définissons simplement sur “p” comme espace réservé) – toutes les données sont conservées dans la clé elle-même. Les deux arguments suivants sont EX et le temps nécessaire à la peinture pour sécher en quelques secondes. Enfin, nous avons l’argument NX. Ces trois dernières valeurs sont ce qui le fait fonctionner – à partir de la fin, l’argument NX signifie “Ne faites cette commande que s’il s’agit d’une clé complètement nouvelle”. L’EX et le temps de séchage sont en fait des valeurs TTL, ce qui signifie que la clé durera jusqu’à ce que la peinture soit sèche, puis la clé s’évaporera, tout comme le solvant de la peinture.

L’opération SADD renverra un 1 si l’élément a été ajouté à l’ensemble ou 0 si l’élément existe déjà dans l’ensemble. Le SET … EX … NX renverra soit “OK” s’il a défini la clé, soit null/(nil) si l’opération n’a pas pu se produire car la clé existe déjà. Ce qui est bien, c’est que vous avez deux opérations qui peuvent se résumer en deux valeurs booléennes. Élaborons la logique ici :

Revenir Revenir Revenir Revenir
SADD 0 (faux) 0 (faux) 1 (vrai) 1 (vrai)
RÉGLAGE … EX … NX D’accord (vrai) nul/néant (faux) D’accord (vrai) nul/néant (faux)
Résultat Laisser repeindre Ne pas autoriser la peinture Laisser repeindre (c’est la première couche) Pas un état possible

L’autre opération consiste à vérifier si la pièce est prête à être peinte. Nous pouvons y parvenir avec SISMEMBRE et Durée de vie à nouveau dans le bloc MULTI/EXEC. Nous utilisons les modèles clés comme mentionné ci-dessus et les arguments sont simples :

  • SISMEMBER a la clé et la chambre,
  • TTL n’est que la clé.

SISMEMBER renverra soit un 0 pour ne pas être membre de l’ensemble et 1 sera renvoyé s’il est membre de l’ensemble. TTL, en revanche, est un peu plus compliqué en ce qui concerne les valeurs de retour. S’il y a un temps à vivre, ce sera 0 ou plus. Si la clé n’a pas de TTL mais que la clé existe, ce sera -1 et si la clé n’existe pas -2. Dans ce cas, nous ne devrions vraiment pas avoir de -1, nous pouvons donc simplement voir si c’est 0 ou plus. Ainsi, nous pouvons toujours avoir deux valeurs booléennes :

Revenir Revenir Revenir Revenir
SISMEMBRE 0 (faux) 0 (faux) 1 (vrai) 1 (vrai)
Durée de vie >=0 (vrai) <0 (faux) >=0 (vrai) <0 (faux)
Résultat Pas un état possible La pièce n’existe pas Doit encore sécher La pièce peut être repeinte

Pour faciliter tout cela, nous allons utiliser yargs et définir chaque opération comme une commande du module yargs. Chaque commande prend un objet où nous définirons la syntaxe de la commande et le desc (qui définit le texte d’aide) et enfin, l’exécution réelle de la commande se produit dans la fonction de gestionnaire. Une fois que la commande Redis s’exécute et ferme la connexion Redis, le processus peut se terminer.

Enfin, vous avez demandCommand() qui déclenche l’exigence de la commande et des erreurs si elle n’est pas là et l’aide() qui s’occupe du rendu du texte d’aide si nécessaire. Enfin, vous terminez avec .argv qui mettra tout cela en mouvement.

Pour exécuter l’application, vous pouvez peindre une pièce avec :

$ node index.js paint kyle bedroom 60minutes --connection ~/path-to-your-file.json

Si vous voulez vérifier si une pièce peut être peinte, exécutez la commande :

$ node index.js readytopaint kyle bedroom --connection ~/path-to-your-file.json

Voilà! En moins de 100 lignes, nous avons un petit utilitaire utile qui utilise Node.js et Redis Enterprise Cloud. Maintenant, vous pourriez penser que l’utilité en tant qu’utilitaire de ligne de commande est limitée, mais la même base ici pourrait être facilement portée avec peu d’effort sur un framework Web comme Exprimer et vous aussi pouvez commencer votre service qui surveille la peinture sèche.

Development Source

Related Posts

RLEC 4.2.1 apporte des contrôles granulaires à la haute disponibilité et aux performances

RLEC 4.2.1 apporte des contrôles granulaires à la haute disponibilité et aux performances

Comment HolidayMe utilise Redis Enterprise comme base de données principale

Comment HolidayMe utilise Redis Enterprise comme base de données principale

Annonce de RedisGears 1.0 : un moteur sans serveur pour Redis

Annonce de RedisGears 1.0 : un moteur sans serveur pour Redis

Clés Redis dans la RAM |  Redis

Clés Redis dans la RAM | Redis

No Comment

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *