Версия :
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
Пожалуйста, проверьте 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()
.
Спасибо за исправление.
Самый полезный комментарий
Пожалуйста, проверьте readme. Вы должны добавить «EX» или «PX» в зависимости от того, какой тип тайм-аута вы хотите.