バージョン:
node_redis:^ 2.8.0
redis-server:Redisサーバー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:Thu Jun 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に中継するだけです。 SETコマンドのドキュメントに従って、TTL client.set(key, value,'EX', ttl, callback)
インライン設定に対してこれを実行します。
さらに、 client.ttl()
コマンドは、存続時間を設定しません。 TTLを設定する場合は、 client.expire()
を使用する必要があります。
訂正していただきありがとうございます。
最も参考になるコメント
READMEを確認してください。 必要なタイムアウトのタイプに応じて、「EX」または「PX」を追加する必要があります。