Introduction
Valkey est un fork communautaire de Redis, lancé en 2024 par des anciens contributeurs pour préserver l'open-source pur face aux changements de licence de Redis Inc. Ce magasin clé-valeur en mémoire excelle en cache, sessions utilisateur, files d'attente et bases de données temps réel, avec des performances ultra-rapides (millions d'op/s). Pourquoi l'adopter en 2026 ? Il est 100% compatible Redis, gratuit, scalable via clustering, et supporte la persistance (RDB snapshots, AOF logs). Contrairement à Redis Cloud payant, Valkey s'intègre facilement en prod. Ce tutoriel intermédiaire vous emmène de l'installation à une app Node.js complète, en couvrant config, persistance et monitoring. À la fin, vous maîtriserez un setup production-ready, comme un mentor le ferait pour un dev senior. (128 mots)
Prérequis
- Système Linux (Ubuntu 22.04+) ou macOS avec Homebrew
- Git et build essentials :
sudo apt install build-essential - Node.js 20+ et npm pour les exemples clients
- Docker (optionnel pour conteneurs)
- Connaissances de base en Redis (clés, hashes, listes)
Installation de Valkey depuis les sources
#!/bin/bash
# Ajout du repo officiel Valkey (Ubuntu/Debian)
curl -fsSL https://packages.valkey.io/public.key | sudo gpg --dearmor -o /usr/share/keyrings/valkey-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/valkey-archive-keyring.gpg] https://packages.valkey.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/valkey.list > /dev/null
sudo apt update
sudo apt install valkey-tools valkey-server -y
# Vérification
valkey-server --version
valkey-cli --versionCe script ajoute le repo officiel Valkey, installe le serveur et les outils CLI. Sur macOS, utilisez brew install valkey. Évitez les snaps pour un contrôle total des configs ; testez toujours la version avec --version pour confirmer l'install.
Première utilisation en CLI
Démarrez Valkey avec sudo systemctl start valkey-server (ou brew services start valkey sur macOS). Connectez-vous via valkey-cli. Testez les bases : SET user:1 "Alice", GET user:1 retourne "Alice". Utilisez FLUSHALL pour vider. Analogie : Valkey est comme un tableau noir géant en RAM – ultra-rapide mais volatile sans persistance. PING répond PONG en <1ms.
Configuration de base personnalisée
# Valkey configuration production-ready
# Bind à localhost seulement pour sécurité
bind 127.0.0.1
# Port par défaut
port 6379
# Timeout client
timeout 0
tcp-keepalive 300
# Logs détaillés
loglevel notice
logfile "/var/log/valkey/valkey-server.log"
# Persistance RDB (snapshots)
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
dir /var/lib/valkey/
# AOF activé pour durabilité
appendonly yes
appendfsync everysec
# Max mémoire 1GB, evict LRU
maxmemory 1gb
maxmemory-policy allkeys-lru
# Auth basique (changez le mot de passe !)
requirepass MonSuperMotDePasse123Ce fichier /etc/valkey/valkey.conf (copiez et adaptez) active persistance RDB (snapshots auto) et AOF (logs append), limite RAM à 1GB avec eviction LRU. requirepass sécurise l'accès. Redémarrez avec sudo systemctl restart valkey-server ; piège : oubliez dir et les dumps échouent.
Activation et test de la persistance
Après config, redémarrez et testez : valkey-cli -a MonSuperMotDePasse123. Insérez 1000 clés (for i in {1..1000}; do SET key$i $i; done), kill (-9) le process, relancez : valkey-cli INFO persistence montre RDB/AOF actifs. RDB = snapshots compacts (idéal backup) ; AOF = logs incrémentaux (durabilité max, mais + gros).
Script de test persistance
#!/bin/bash
PASSWORD="MonSuperMotDePasse123"
VALKEY_CLI="valkey-cli -a $PASSWORD"
# Insertion de données
$VALKEY_CLI FLUSHALL
for i in {1..500}; do
$VALKEY_CLI SET test:key$i "valeur $i"
done
# Snapshot manuel
$VALKEY_CLI BGSAVE
# Vérif mémoire et persistance
$VALKEY_CLI INFO persistence
$VALKEY_CLI INFO memory
# Kill et restart
sudo pkill valkey-server
sudo systemctl start valkey-server
sleep 2
# Vérif récupération
RECOVERED=$($VALKEY_CLI EXISTS test:key1)
echo "Clé récupérée : $RECOVERED (1=oui)"
$VALKEY_CLI KEYS "test:key*" | wc -lCe script teste RDB/AOF : insère, snapshot, kill brutal, relance, vérifie récupération. BGSAVE force snapshot asynchrone. Piège : sans appendonly yes, AOF ignore ; ajustez maxmemory pour éviter OOM en prod.
Intégration avec une app Node.js
Pour l'usage réel, utilisez un client comme @valkey/js (officiel). Installez npm i @valkey/js. Analogie : CLI = console dev ; client = prod scalable. Gérez connexions pool, retries, et pub/sub pour temps réel.
Client Node.js TypeScript complet
import { createClient } from 'redis';
async function main() {
const client = createClient({
url: 'redis://localhost:6379',
password: 'MonSuperMotDePasse123',
});
client.on('error', (err) => console.error('Erreur Valkey:', err));
await client.connect();
// SET/GET basique
await client.set('user:42', JSON.stringify({ name: 'Bob', age: 30 }));
const user = await client.get('user:42');
console.log('User:', JSON.parse(user!));
// Hash pour objets complexes
await client.hSet('session:abc123', {
csrf: 'token123',
expires: Date.now() + 3600000,
});
const session = await client.hGetAll('session:abc123');
console.log('Session:', session);
// Liste pour file d'attente
await client.lPush('jobs', 'job1', 'job2');
const job = await client.lPop('jobs');
console.log('Job pop:', job);
// TTL exemple
await client.set('temp:cache', 'data', { EX: 60 });
await client.quit();
}
main().catch(console.error);Ce script TS autonome utilise @valkey/js (npm-compatible Redis). Gère hashes (sessions), listes (queues), TTL (cache). Ajoutez ts-node pour run ; piège : oubliez connect() ou error handler, crash en prod. Scalez avec poolSize: 10.
Monitoring avec Valkey CLI avancé
#!/bin/bash
PASSWORD="MonSuperMotDePasse123"
# Stats en temps réel
valkey-cli -a $PASSWORD --stat
# INFO détaillé
valkey-cli -a $PASSWORD INFO all | grep -E '(used_memory|connected_clients|keyspace_hits)'
# Slowlog top 10 queries lentes
valkey-cli -a $PASSWORD SLOWLOG get 10
# Pub/Sub test
valkey-cli -a $PASSWORD --cluster create 127.0.0.1:6379 &
# Cleanup
valkey-cli -a $PASSWORD FLUSHDBCe script affiche métriques live (--stat), slow queries, et prépare cluster. Utilisez INFO keyspace_hits pour hit-rate cache (>90% idéal). Piège : sans monitoring, fuites mémoire passent inaperçues ; cron ce script toutes les 5min.
Bonnes pratiques
- Sécurité : Toujours
requirepass+bind 127.0.0.1; TLS en prod viatls-port. - Mémoire :
maxmemory-policy allkeys-lfupour cache hot data ; monitorused_memory. - Persistance : AOF
everysec+ RDB hebdo ; backup offsite. - Scaling : Cluster mode pour >1GB ; Sentinel pour HA.
- Clients : Connexions pool (5-20), retries exponentiels.
Erreurs courantes à éviter
- Oublier auth :
NOAUTH Authentication required→ toujours-aen CLI. - Pas de
maxmemory: OOM killer tue le process en prod. - Persistance off : Données perdues après reboot → vérifiez
INFO persistence. - Clés non-TTL : Mémoire gonflée →
EXPIREsystématique sur caches.
Pour aller plus loin
- Docs officielles : valkey.io
- Cluster setup :
valkey-cli --cluster create - Alternatives : Dragonfly pour compat Redis.
- Formations Learni Dev sur bases NoSQL avancées et scaling.