Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Scripts Lua
Valkey et Redis OSS prennent en charge plus de 200 commandes, y compris celles permettant d'exécuter des scripts Lua. Cependant, en ce qui concerne les scripts Lua, plusieurs pièges peuvent affecter la mémoire et la disponibilité de Valkey ou Redis OSS.
Scripts Lua non paramétrés
Chaque script Lua est mis en cache sur le serveur Valkey ou Redis OSS avant son exécution. Les scripts Lua non paramétrés sont uniques, ce qui peut amener le serveur Valkey ou Redis OSS à stocker un grand nombre de scripts Lua et à consommer davantage de mémoire. Pour atténuer ce problème, assurez-vous que tous les scripts Lua sont paramétrés et exécutez régulièrement la commande SCRIPT FLUSH pour nettoyer les scripts Lua mis en cache, si nécessaire.
Sachez également que les clés doivent être fournies. Si aucune valeur n'est fournie pour le paramètre KEY, le script échouera. Par exemple, cela ne fonctionnera pas :
serverless-test-lst4hg.serverless.use1.cache.amazonaws.com:6379> eval 'return "Hello World"' 0 (error) ERR Lua scripts without any input keys are not supported.
Cela fonctionnera :
serverless-test-lst4hg.serverless.use1.cache.amazonaws.com:6379> eval 'return redis.call("get", KEYS[1])' 1 mykey-2 "myvalue-2"
L’exemple suivant illustre l’utilisation des scripts paramétrés. Le premier exemple d’approche non paramétrée, qui n’est pas recommandée, donne lieu à trois scripts Lua mis en cache différents :
eval "return redis.call('set','key1','1')" 0 eval "return redis.call('set','key2','2')" 0 eval "return redis.call('set','key3','3')" 0
Utilisez plutôt le modèle suivant pour créer un script unique capable d’accepter les paramètres transmis :
eval "return redis.call('set',KEYS[1],ARGV[1])" 1 key1 1 eval "return redis.call('set',KEYS[1],ARGV[1])" 1 key2 2 eval "return redis.call('set',KEYS[1],ARGV[1])" 1 key3 3
Scripts Lua de longue durée
Les scripts Lua peuvent exécuter plusieurs commandes de manière atomique. Leur exécution peut donc prendre plus de temps qu'une commande Valkey ou Redis OSS normale. Si le script Lua exécute uniquement des opérations en lecture seule, vous pouvez l’arrêter en plein milieu. Cependant, dès que le script Lua exécute une opération d’écriture, il devient impossible de l’arrêter et il doit être s’exécuter jusqu’à la fin. Un script Lua de longue durée qui est en train de muter peut empêcher le serveur Valkey ou Redis OSS de répondre pendant une longue période. Pour atténuer ce problème, évitez les scripts Lua de longue durée et testez le script dans un environnement de pré-production.
Script Lua avec écritures en mode furtif
Un script Lua peut continuer à écrire de nouvelles données dans Valkey ou Redis OSS de plusieurs manières, même lorsque Valkey ou Redis OSS est terminé : maxmemory
Le script démarre lorsque le serveur Valkey ou Redis OSS se trouve en dessous et contient plusieurs
maxmemory
opérations d'écriture à l'intérieurLa première commande d’écriture du script ne consomme pas de mémoire (comme DEL), puis les autres opérations d’écriture consomment de la mémoire
Vous pouvez atténuer ce problème en configurant une politique d'expulsion appropriée dans le serveur Valkey ou Redis OSS autre que.
noeviction
Cela permet à Redis OSS d'expulser des éléments et de libérer de la mémoire entre les scripts Lua.