Node-redis: `Erro de sintaxe ERR` ao usar set

Criado em 24 ago. 2017  ·  5Comentários  ·  Fonte: NodeRedis/node-redis

  • Versão :
    node_redis: ^ 2.8.0
    redis-server: servidor Redis v = 4.0.1 sha = 00000000: 0 malloc = libc bits = 64 build = f37081b32886670b

  • Plataforma :
    Node.js v8.3.0
    Darwin 16.7.0 Darwin Kernel Versão 16.7.0: Qui, 15 de junho 17:36:27 PDT 2017; root: xnu-3789.70.16 ~ 2 / RELEASE_X86_64 x86_64

  • Descrição :
    set resultará em ERR syntax error :

const redis = require('redis'),
      Promise = require('bluebird'),
      conf = require(__root_dir + '/conf/conf')

// Promise.promisifyAll(redis.RedisClient.prototype)
// Promise.promisifyAll(redis.Multi.prototype)
const client = redis.createClient(
    conf.redis.port,
    conf.redis.host)

const key = 'sess-test'
const uid = 1
const ttl = 60 * 60 * 24 * 30
client.set(key, uid, ttl)

irá gerar

Send localhost:6379 id 0: *4
$3
set
$9
sess-test
$1
1
$7
2592000

Net read localhost:6379 id 0
Error ReplyError: ERR syntax error
question

Comentários muito úteis

Por favor, verifique o readme. Você deve adicionar 'EX' ou 'PX' dependendo do tipo de tempo limite que deseja.

Todos 5 comentários

Por favor, verifique o readme. Você deve adicionar 'EX' ou 'PX' dependendo do tipo de tempo limite que deseja.

Obrigado

Caso alguém descubra esse problema por meio de uma pesquisa e não seja particularmente ajudado pelo que está aqui, aqui está o que me ajudou. Eu estava tentando fazer um conjunto com um TTL embutido: redis.set(key, value, ttl, callback) e estava recebendo um erro de sintaxe semelhante.

Parece que você não pode fazer o TTL inline assim. Em vez disso, faça seu conjunto sem o argumento TTL e, em seguida, se realmente precisar definir um TTL para essa chave, siga essa solicitação com uma chamada para redis.ttl() .

@atuttle Isso não está certo. Node_redis apenas retransmite os comandos para o Redis. O que você deseja fazer é isso para a configuração inline do TTL client.set(key, value,'EX', ttl, callback) , de acordo com a documentação do comando SET .

Além disso, o comando client.ttl() _gets_ o tempo de vida não o define. Se você quiser fazer isso _set_ o TTL, você deve usar client.expire() .

Obrigado pela correção.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

shmendo picture shmendo  ·  6Comentários

aletorrado picture aletorrado  ·  6Comentários

gpascale picture gpascale  ·  4Comentários

abhaygarg picture abhaygarg  ·  5Comentários

Stono picture Stono  ·  6Comentários