Magasin de paires clé-valeur Upstash Redis
Interagir avec le magasin de paires clé-valeur compatible Redis d'Upstash en utilisant l'interface REST.
Localisation du script
bun run scripts/upstash-client.ts <command> [args...]
IMPORTANT : Toujours exécuter avec bun run, jamais directement.
Configuration
Variables d'environnement
Le script utilise par défaut ces variables d'environnement :
UPSTASH_REDIS_REST_URL- L'URL de l'API REST UpstashUPSTASH_REDIS_REST_TOKEN- Le jeton de l'API REST Upstash
Surcharger les identifiants
Si l'utilisateur fournit des identifiants provenant d'une autre source (contexte de conversation, fichier, etc.), utiliser les drapeaux --url et --token pour surcharger les variables d'environnement :
bun run scripts/upstash-client.ts --url "https://..." --token "AX..." GET mykey
Priorité : Drapeaux en ligne de commande > Variables d'environnement
Référence des commandes
Commandes de chaîne
# Récupérer/Définir
GET <key>
SET <key> <value> [--ex seconds] [--px ms] [--nx] [--xx] [--keepttl] [--get]
SETNX <key> <value> # Définir si n'existe pas
SETEX <key> <seconds> <value> # Définir avec expiration
# Plusieurs clés (paires clé/valeur)
MGET <key1> [key2...]
MSET <key1> <val1> [key2 val2...]
MSETNX <key1> <val1> [key2 val2...] # Définir tous si aucun n'existe
# Compteurs
INCR <key>
INCRBY <key> <increment>
INCRBYFLOAT <key> <increment>
DECR <key>
DECRBY <key> <decrement>
# Manipulation de chaînes
APPEND <key> <value>
STRLEN <key>
GETRANGE <key> <start> <end>
SETRANGE <key> <offset> <value>
Commandes de hachage
Les hachages stockent des paires champ-valeur. Passer les champs et valeurs comme arguments alternés :
# Définir les champs de hachage (paires champ/valeur)
HSET <key> <field1> <val1> [field2 val2...]
HSETNX <key> <field> <value> # Définir le champ si n'existe pas
# Récupérer les champs de hachage
HGET <key> <field>
HMGET <key> <field1> [field2...]
HGETALL <key>
# Opérations de hachage
HDEL <key> <field1> [field2...]
HEXISTS <key> <field>
HKEYS <key>
HVALS <key>
HLEN <key>
HINCRBY <key> <field> <increment>
HINCRBYFLOAT <key> <field> <increment>
HSCAN <key> <cursor> [MATCH pattern] [COUNT count]
Exemples :
# Stocker les données utilisateur
bun run scripts/upstash-client.ts HSET user:1 name "John" email "john@example.com" age 30
# Récupérer un seul champ
bun run scripts/upstash-client.ts HGET user:1 name
# Récupérer tous les champs
bun run scripts/upstash-client.ts HGETALL user:1
# Incrémenter un champ numérique
bun run scripts/upstash-client.ts HINCRBY user:1 age 1
Commandes de liste
Les listes sont des collections ordonnées. Les valeurs sont ajoutées/supprimées à gauche (tête) ou à droite (queue) :
# Ajouter des éléments
LPUSH <key> <val1> [val2...] # Ajouter à la tête
RPUSH <key> <val1> [val2...] # Ajouter à la queue
LPUSHX <key> <val1> [val2...] # Ajouter si la liste existe
RPUSHX <key> <val1> [val2...]
# Supprimer des éléments
LPOP <key> [count]
RPOP <key> [count]
# Accéder aux éléments
LRANGE <key> <start> <stop> # Obtenir une plage (0 = premier, -1 = dernier)
LLEN <key>
LINDEX <key> <index>
# Modifier
LSET <key> <index> <value>
LREM <key> <count> <value> # Supprimer count occurrences
LTRIM <key> <start> <stop> # Conserver uniquement la plage
LINSERT <key> <BEFORE|AFTER> <pivot> <value>
LPOS <key> <value>
LMOVE <src> <dst> <LEFT|RIGHT> <LEFT|RIGHT>
Exemples :
# Créer une file de tâches
bun run scripts/upstash-client.ts RPUSH tasks "task1" "task2" "task3"
# Obtenir toutes les tâches
bun run scripts/upstash-client.ts LRANGE tasks 0 -1
# Retirer une tâche de l'avant (file FIFO)
bun run scripts/upstash-client.ts LPOP tasks
# Retirer une tâche de l'arrière (pile LIFO)
bun run scripts/upstash-client.ts RPOP tasks
Commandes d'ensemble
Les ensembles stockent des membres uniques et non ordonnés :
# Ajouter/supprimer des membres
SADD <key> <member1> [member2...]
SREM <key> <member1> [member2...]
# Requête
SMEMBERS <key>
SISMEMBER <key> <member>
SMISMEMBER <key> <member1> [member2...]
SCARD <key>
# Accès aléatoire
SPOP <key> [count]
SRANDMEMBER <key> [count]
# Opérations d'ensemble
SINTER <key1> [key2...]
SINTERSTORE <dest> <key1> [key2...]
SUNION <key1> [key2...]
SUNIONSTORE <dest> <key1> [key2...]
SDIFF <key1> [key2...]
SDIFFSTORE <dest> <key1> [key2...]
SMOVE <src> <dst> <member>
SSCAN <key> <cursor> [MATCH pattern] [COUNT count]
Exemples :
# Ajouter des étiquettes
bun run scripts/upstash-client.ts SADD article:1:tags "javascript" "redis" "nodejs"
# Vérifier l'appartenance
bun run scripts/upstash-client.ts SISMEMBER article:1:tags "javascript"
# Obtenir tous les membres
bun run scripts/upstash-client.ts SMEMBERS article:1:tags
# Trouver les étiquettes communes entre articles
bun run scripts/upstash-client.ts SINTER article:1:tags article:2:tags
Commandes d'ensemble trié
Les ensembles triés stockent des membres avec des scores pour le classement :
# Ajouter des membres (paires score/membre)
ZADD <key> <score1> <member1> [score2 member2...] [--nx] [--xx] [--gt] [--lt] [--ch]
# Supprimer
ZREM <key> <member1> [member2...]
ZREMRANGEBYRANK <key> <start> <stop>
ZREMRANGEBYSCORE <key> <min> <max>
# Scores et rangs
ZSCORE <key> <member>
ZMSCORE <key> <member1> [member2...]
ZRANK <key> <member> # Rang (bas à haut)
ZREVRANK <key> <member> # Rang (haut à bas)
ZINCRBY <key> <increment> <member>
# Requêtes de plage
ZRANGE <key> <start> <stop> [--withscores] [--rev] [--byscore] [--bylex]
ZRANGEBYSCORE <key> <min> <max> [--withscores] [--limit off,count]
ZREVRANGE <key> <start> <stop> [--withscores]
ZREVRANGEBYSCORE <key> <max> <min> [--withscores] [--limit off,count]
# Comptage
ZCARD <key>
ZCOUNT <key> <min> <max>
# Pop
ZPOPMIN <key> [count]
ZPOPMAX <key> [count]
# Opérations d'ensemble
ZINTERSTORE <dest> <numkeys> <key1> [key2...]
ZUNIONSTORE <dest> <numkeys> <key1> [key2...]
ZSCAN <key> <cursor> [MATCH pattern] [COUNT count]
Exemples :
# Créer un classement (paires score membre)
bun run scripts/upstash-client.ts ZADD leaderboard 1000 "player1" 1500 "player2" 1200 "player3"
# Obtenir les 3 premiers avec scores (le plus haut en premier)
bun run scripts/upstash-client.ts ZRANGE leaderboard 0 2 --rev --withscores
# Obtenir le rang du joueur
bun run scripts/upstash-client.ts ZREVRANK leaderboard "player2"
# Incrémenter le score du joueur
bun run scripts/upstash-client.ts ZINCRBY leaderboard 100 "player1"
# Obtenir les joueurs avec des scores entre 1 000 et 1 500
bun run scripts/upstash-client.ts ZRANGEBYSCORE leaderboard 1000 1500 --withscores
Commandes de clé
# Supprimer
DEL <key1> [key2...]
UNLINK <key1> [key2...] # Suppression asynchrone
# Existence/Type
EXISTS <key1> [key2...]
TYPE <key>
# Expiration
EXPIRE <key> <seconds>
EXPIREAT <key> <timestamp>
PEXPIRE <key> <milliseconds>
PEXPIREAT <key> <timestamp>
TTL <key>
PTTL <key>
PERSIST <key> # Supprimer l'expiration
# Renommer
RENAME <key> <newkey>
RENAMENX <key> <newkey>
# Rechercher
KEYS <pattern> # À utiliser avec prudence en production
SCAN <cursor> [MATCH pattern] [COUNT count]
# Autre
COPY <src> <dst>
DUMP <key>
TOUCH <key1> [key2...]
RANDOMKEY
OBJECT ENCODING|FREQ|IDLETIME|REFCOUNT <key>
Exemples :
# Définir une clé avec expiration d'1 heure
bun run scripts/upstash-client.ts SET session:abc "data"
bun run scripts/upstash-client.ts EXPIRE session:abc 3600
# Ou en une seule commande
bun run scripts/upstash-client.ts SET session:abc "data" --ex 3600
# Vérifier le TTL
bun run scripts/upstash-client.ts TTL session:abc
# Scanner les clés correspondant au motif
bun run scripts/upstash-client.ts SCAN 0 MATCH "user:*" COUNT 100
Commandes serveur
PING [message]
ECHO <message>
DBSIZE
TIME
INFO [section]
FLUSHDB # Supprimer toutes les clés de la DB actuelle (DANGEREUX)
FLUSHALL # Supprimer toutes les clés de toutes les DBs (DANGEREUX)
Options de commandes
Options SET
--ex <seconds> # Expirer en secondes
--px <ms> # Expirer en millisecondes
--exat <ts> # Expirer au timestamp Unix (secondes)
--pxat <ts> # Expirer au timestamp Unix (ms)
--nx # Définir uniquement si la clé n'existe pas
--xx # Définir uniquement si la clé existe
--keepttl # Conserver le TTL existant
--get # Retourner l'ancienne valeur
Options ZADD
--nx # Ajouter uniquement les nouveaux membres
--xx # Mettre à jour uniquement les membres existants
--gt # Mettre à jour uniquement si le nouveau score > courant
--lt # Mettre à jour uniquement si le nouveau score < courant
--ch # Retourner le nombre d'éléments modifiés
Options ZRANGE
--withscores # Inclure les scores dans la sortie
--byscore # Plage par score au lieu du rang
--bylex # Plage par ordre lexicographique
--rev # Ordre inverse
--limit off,count # Limiter les résultats (ex. --limit 0,10)
Format de sortie
- Valeurs de chaîne : Affichées directement
- null/nil : Affiche
(nil) - Objets/tableaux : Affichés au format JSON avec indentation
Comportement de confirmation
Par défaut : Demander une confirmation
Avant d'exécuter toute opération destructive (écriture, modification ou suppression), vous DEVEZ demander une confirmation à l'utilisateur. Cela inclut :
Opérations d'écriture :
- SET, SETNX, SETEX, PSETEX, MSET, MSETNX
- HSET, HSETNX
- LPUSH, RPUSH, LPUSHX, RPUSHX, LSET, LINSERT
- SADD
- ZADD
Opérations de modification :
- INCR, INCRBY, INCRBYFLOAT, DECR, DECRBY
- APPEND, SETRANGE
- HINCRBY, HINCRBYFLOAT
- LREM, LTRIM, LMOVE
- ZINCRBY
Opérations de suppression :
- DEL, UNLINK
- HDEL
- LPOP, RPOP
- SREM, SPOP, SMOVE
- ZREM, ZREMRANGEBYRANK, ZREMRANGEBYSCORE, ZPOPMIN, ZPOPMAX
- FLUSHDB, FLUSHALL (prudence accrue)
Opérations TTL/Renommage :
- EXPIRE, EXPIREAT, PEXPIRE, PEXPIREAT, PERSIST
- RENAME, RENAMENX
Exemple d'invite de confirmation :
« Je vais exécuter HSET
user:1avec les champs{name: "John", email: "john@example.com"}. Procéder ? »
Mode YOLO : Ignorer la confirmation
Si l'utilisateur indique qu'il ne souhaite pas être invité à confirmer, respecter cela pour toutes les opérations ultérieures. Les indicateurs incluent :
- « Mode YOLO »
- « Ne demande pas de confirmation »
- « Tu es libre de faire des changements sans demander »
- « Fais juste »
- « Pas besoin de confirmer »
- « Auto-approuver » ou « auto-confirmer »
- Toute formulation similaire indiquant une approbation générale
Une fois le mode YOLO activé, procéder aux opérations destructives sans demander, mais informer toujours l'utilisateur de ce qui a été fait.
Exemple :
Défini
user:1avec{name: "John", email: "john@example.com"}- effectué.
Gestion des erreurs
Si les identifiants sont manquants ou invalides, le script se terminera avec un message d'erreur. S'assurer que l'utilisateur a configuré soit :
- Les variables d'environnement (
UPSTASH_REDIS_REST_URL,UPSTASH_REDIS_REST_TOKEN) - Soit fournit les identifiants via les drapeaux
--urlet--token
Quand utiliser cette compétence
- L'utilisateur demande explicitement de stocker ou récupérer des données depuis Upstash/Redis
- Besoin de persister des données entre les conversations ou sessions
- Implémenter la mise en cache pour les opérations coûteuses
- Maintenir des compteurs, des limites de débit ou des statistiques
- Stocker les préférences utilisateur ou les données de session
- Construire des classements ou des rangs (ensembles triés)
- Gérer des files d'attente ou des listes de tâches (listes)
- Étiquetage ou catégorisation (ensembles)
- Stocker des objets structurés (hachages)
- Tout scénario nécessitant un stockage de paires clé-valeur rapide