Node-redis: Синтаксическая ошибка ERR при использовании set

Созданный на 24 авг. 2017  ·  5Комментарии  ·  Источник: NodeRedis/node-redis

  • Версия :
    node_redis: ^ 2.8.0
    redis-server: Redis server v = 4.0.1 sha = 00000000: 0 malloc = libc bits = 64 build = f37081b32886670b

  • Платформа :
    Node.js v8.3.0
    Darwin 16.7.0 Версия ядра Darwin 16.7.0: четверг, 15 июня, 17:36:27 PDT 2017; корень: xnu-3789.70.16 ~ 2 / RELEASE_X86_64 x86_64

  • Описание :
    set приведет к 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)

будет генерировать

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

Самый полезный комментарий

Пожалуйста, проверьте readme. Вы должны добавить «EX» или «PX» в зависимости от того, какой тип тайм-аута вы хотите.

Все 5 Комментарий

Пожалуйста, проверьте readme. Вы должны добавить «EX» или «PX» в зависимости от того, какой тип тайм-аута вы хотите.

Спасибо

В случае, если кто-то еще столкнется с этой проблемой в результате поиска и не особо поможет тому, что здесь находится, вот что мне помогло. Я пытался сделать набор со встроенным TTL: redis.set(key, value, ttl, callback) и получал аналогичную синтаксическую ошибку.

Похоже, вы не можете так встроить TTL в строку. Вместо этого сделайте свой набор без аргумента TTL, а затем, если вам действительно нужно установить TTL для этого ключа, выполните этот запрос с вызовом redis.ttl() .

@atuttle Это не совсем так. Node_redis просто передает команды Redis. То, что вы хотите сделать, - это встроенная установка TTL client.set(key, value,'EX', ttl, callback) в соответствии с документацией по команде SET .

Кроме того, команда client.ttl() _gets_ время жизни не устанавливает его. Если вы хотите сделать это _установить_ TTL, вы должны использовать client.expire() .

Спасибо за исправление.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги