Redis n'est pas mort, mais vive Redict

Redis n'est pas mort, mais vive Redict

Alexandre P. dans Dev - Le 07-04-2024

Redis, la base de données en RAM qui fonctionne en clé-valeur a changé de licence dernièrement. Fini le BSD, bonjour le copyright. C'est un move qui a légèrement agacé la communauté de la Tech.

Redis n'est plus sous licence open source

redis-logo.png

Redis, désormais détenu par une société commerciale a vu sa licence changer de forme. Il se trouve que dans son code source, il y avait également la participation de la communauté du libre.

Du jour au lendemain ce code source s'est retrouvé sous le joug d'une société qui, désormais, l'exploite uniquement à ses fins.

Le problème qu'il s'est passé, ce n'est pas d'essayer de faire le l'argent en tant que société.

Moi même, je suis développeur et je suis bien placé pour savoir qu'à un moment donné il faut valoriser son travail qui a demandé des efforts de conception/réalisation. Mais lorsque des gens interviennent bénévolement pendant des années afin de faire évoluer le projet, s'approprier leur travail gratuitement, c'est du vol.

La communauté du libre n'a pas tardé à s'organiser.

La naissance du projet Redict

redict-logo.svg

Redict pour REmote DICTionary a été créé sous licence LGPL 3.0 par la communauté du libre.

Le projet Redis, je connais bien. J'ai de nombreux projets qui s'en servent et Dieu sait que même ce blog s'appuie sur Redis.

Je vais migrer dès que je peux sur Redict et l'objectif de cet article est de voir s'il y a moyen de remplacer ce service en fournissant le moins d'efforts possible.

Dans cet article nous allons installer Redict via docker, puis nous effectuerons un test simple d'écriture et lecture. Enfin, je ferai un test local du moteur de blog et nous verrons si Redict est totalement compatible avec les manipulations plus complexes (pattern de clé etc...).

Installation de Redict via Docker

Je me crée un dossier redict-test, et dans un fichier docker-compose.yml:

version: "3.1"

services:
  db:
    image: registry.redict.io/redict
    restart: always
    ports:
      - 6379:6379

Une fois le fichier créé, on peu lancer le service:

sudo docker compose up -d

Nous pouvons vérifier son bon fonctionnement en temps réel:

sudo watch docker compose ps

Test de Redict avec Node.js

Nous allons créer un projet simple en Node.js Typescript (je ne fais plus de Javascript), mais pas de panique, vous allez voir c'est tout aussi simple. Suivez le guide !

Création d'un package.json et ajout des dépendances:

yarn init

yarn add redis
yarn add typescript @types/node ts-node -D

Nous pouvons maintenant créer un fichier, index.ts:

import { createClient } from "redis";

(async () => {
  const client = await createClient({
    url: "redis://127.0.0.1:6379",
  })
    .on("error", (err) => console.log("Redis Client Error", err))
    .connect();

  await client.set("key", `value ${Date.now()}`);
  const value = await client.get("key");
  console.log(value);
  await client.disconnect();
})();

Pour lancer, nous avons juste besoin d'entrer:

npx ts-node index.ts

Nous devrions obtenir le résultat suivant:

value 1712480118619

Victoire ! 🎉🎉

Je tiens tout de même à préciser, que nous pouvons utiliser redis-cli, comme nous le faisions habituellement avec Redis.

Vu que tout semble ok pour un besoin simple de lecture/écriture, essayons de répondre à un besoin plus complexe.

Mettre le cache lifecycle du blog sur Redict

Je mets en place mon blog en local avec un dump des articles en ligne.

Nous n'avons aucun changement à faire au niveau des libs, ni même des variables d'environnement.

Je lance un monitor sur un redis-cli qui se connecte au serveur Redict, et voici ce qu'il se passe lorsque je navigue sur le site:

redict.gif

Tout semble fonctionner à l'identique, je crois que nous avons réussi ! 🥳

Il ne me reste plus qu'à lancer le chantier en production.

#redis#redict#nodejs#database#licence

user picture
Alexandre P.

Développeur passionné depuis plus de 20 ans, j'ai une appétence particulière pour les défis techniques et changer de technologie ne me fait pas froid aux yeux.