Versión :
node_redis: ^ 2.8.0
servidor de redis: servidor de 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 Versión 16.7.0: jueves 15 de junio 17:36:27 PDT 2017; raíz: xnu-3789.70.16 ~ 2 / RELEASE_X86_64 x86_64
Descripción :
set
resultará en 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)
Generará
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, consulte el archivo Léame. Debe agregar 'EX' o 'PX' dependiendo del tipo de tiempo de espera que desee.
Gracias
En caso de que alguien más se dé cuenta de este problema después de una búsqueda y lo que está aquí no lo ayude particularmente, esto es lo que me ayudó. Estaba tratando de hacer un conjunto con un TTL en línea: redis.set(key, value, ttl, callback)
y obtenía un error de sintaxis similar.
Parece que no puedes hacer el TTL en línea de esa manera. En su lugar, haga su conjunto sin el argumento TTL, y luego, si realmente necesita establecer un TTL para esa clave, siga esa solicitud con una llamada a redis.ttl()
.
@atuttle Eso no es del todo correcto. Node_redis simplemente transmite los comandos a Redis. Lo que quiere hacer es esto para la configuración en línea del TTL client.set(key, value,'EX', ttl, callback)
, según la documentación del comando SET .
Además, el comando client.ttl()
_obtiene_ el tiempo de vida no lo establece. Si quieres hacerlo _set_ el TTL tienes que usar client.expire()
.
Gracias por la corrección.
Comentario más útil
Por favor, consulte el archivo Léame. Debe agregar 'EX' o 'PX' dependiendo del tipo de tiempo de espera que desee.