As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Scripts Lua
O Valkey e o Redis OSS aceitam mais de 200 comandos, inclusive aqueles para executar scripts Lua. No entanto, quando o assunto são scripts Lua, existem diversas armadilhas que podem afetar a memória e a disponibilidade do Valkey ou do Redis OSS.
Scripts Lua não parametrizados
Cada script Lua é armazenado em cache no servidor Valkey ou Redis OSS antes de ser executado. Os scripts Lua não parametrizados são exclusivos, o que pode fazer com que o servidor Valkey ou Redis OSS armazene um número grande de scripts Lua e consuma mais memória. Para mitigar isso, certifique-se de que todos os scripts Lua estejam parametrizados e execute regularmente o SCRIPT FLUSH para limpar scripts Lua em cache, se necessário.
Também esteja ciente de que as chaves devem ser fornecidas. Se um valor para o parâmetro KEY não for fornecido, o script falhará. Por exemplo, isso não funcionará:
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.
Isso funcionará:
serverless-test-lst4hg.serverless.use1.cache.amazonaws.com:6379> eval 'return redis.call("get", KEYS[1])' 1 mykey-2 "myvalue-2"
O exemplo a seguir mostra como usar scripts parametrizados: Primeiro, temos um exemplo de uma abordagem não parametrizada que resulta em três scripts Lua em cache diferentes e não é recomendada:
eval "return redis.call('set','key1','1')" 0 eval "return redis.call('set','key2','2')" 0 eval "return redis.call('set','key3','3')" 0
Em vez disso, use o seguinte padrão para criar um único script capaz de aceitar parâmetros passados:
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 longa duração
Os scripts Lua podem executar vários comandos atomicamente, logo, podem demorar mais para serem concluídos do que um comando normal do Valkey ou Redis OSS. Se o script Lua só executar operações somente leitura, você poderá pará-lo no meio. No entanto, assim que executa uma operação de gravação, o script Lua se torna imortal e deve ser executado até a conclusão. Um script Lua de longa execução que esteja sofrendo mutação pode fazer com que o servidor Valkey ou Redis OSS deixe de responder por um longo tempo. Para mitigar esse problema, evite scripts Lua de longa duração e teste o script em um ambiente de pré-produção.
Script Lua com gravações furtivas
Existem algumas maneiras pelas quais um script Lua pode continuar gravando novos dados no Valkey ou Redis OSS mesmo quando o Valkey ou Redis OSS estiver acima de maxmemory
:
O script começa quando o servidor Valkey ou Redis OSS está abaixo de
maxmemory
e contém várias operações de gravação dentroO primeiro comando de gravação do script não está consumindo memória (como DEL), seguido de mais operações de gravação que consumam memória
Você pode mitigar esse problema configurando uma política de remoção adequada no servidor Valkey ou Redis OSS diferente de
noeviction
. Isso permite que o Redis OSS remova itens e libere memória entre os scripts Lua.