Version:
node_redis: ^2.8.0
redis-server: Redis server v=4.0.1 sha=00000000:0 malloc=libc bits=64 build=f37081b32886670b
Platform:
Node.js v8.3.0
Darwin 16.7.0 Darwin Kernel Version 16.7.0: Thu Jun 15 17:36:27 PDT 2017; root:xnu-3789.70.16~2/RELEASE_X86_64 x86_64
Description:
set
will result in 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)
will generate
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
Please check the readme. You have to add 'EX' or 'PX' depending on what type of timeout you want.
Thanks
In case anyone else lands on this issue from a search and is not particularly helped by what's here, here's what helped me. I was trying to do a set with an inline TTL: redis.set(key, value, ttl, callback)
, and was getting a similar syntax error.
It seems that you can't do the TTL inline like that. Instead, do your set without the TTL argument, and then if you really need to set a TTL for that key, follow that request with a call to redis.ttl()
.
@atuttle That's not quite right. Node_redis just relays the commands to Redis. What you're wanting to do is this for inline setting of the TTL client.set(key, value,'EX', ttl, callback)
, as per the SET command's documentation.
Additionally, the client.ttl()
command _gets_ the time to live not sets it. If you want to do it _set_ the TTL you have to use client.expire()
.
Thanks for the correction.
Most helpful comment
Please check the readme. You have to add 'EX' or 'PX' depending on what type of timeout you want.