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
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.
Comentários muito úteis
Por favor, verifique o readme. Você deve adicionar 'EX' ou 'PX' dependendo do tipo de tempo limite que deseja.