Node-redis: "Error de sintaxis ERR" al usar set

Creado en 24 ago. 2017  ·  5Comentarios  ·  Fuente: NodeRedis/node-redis

  • 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
question

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.

Todos 5 comentarios

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.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

aletorrado picture aletorrado  ·  6Comentarios

ghost picture ghost  ·  3Comentarios

betimer picture betimer  ·  5Comentarios

twappworld picture twappworld  ·  7Comentarios

shmendo picture shmendo  ·  6Comentarios