Node-redis: `Erreur de syntaxe ERR` lors de l'utilisation de set

Créé le 24 août 2017  ·  5Commentaires  ·  Source: NodeRedis/node-redis

  • Version :
    node_redis: ^ 2.8.0
    serveur redis: serveur Redis v = 4.0.1 sha = 00000000: 0 malloc = libc bits = 64 build = f37081b32886670b

  • Plateforme :
    Node.js v8.3.0
    Darwin 16.7.0 Darwin Kernel Version 16.7.0: jeu 15 juin 17:36:27 PDT 2017; racine: xnu-3789.70.16 ~ 2 / RELEASE_X86_64 x86_64

  • Description :
    set donnera 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)

va générer

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

Commentaire le plus utile

Veuillez vérifier le fichier Lisez-moi. Vous devez ajouter «EX» ou «PX» selon le type de délai que vous souhaitez.

Tous les 5 commentaires

Veuillez vérifier le fichier Lisez-moi. Vous devez ajouter «EX» ou «PX» selon le type de délai que vous souhaitez.

Merci

Au cas où quelqu'un d'autre atterrirait sur ce problème à la suite d'une recherche et ne serait pas particulièrement aidé par ce qui est ici, voici ce qui m'a aidé. J'essayais de faire un ensemble avec un TTL en ligne: redis.set(key, value, ttl, callback) , et j'obtenais une erreur de syntaxe similaire.

Il semble que vous ne pouvez pas faire le TTL en ligne comme ça. Au lieu de cela, faites votre ensemble sans l'argument TTL, puis si vous avez vraiment besoin de définir un TTL pour cette clé, suivez cette demande avec un appel à redis.ttl() .

@atuttle Ce n'est pas tout à fait vrai. Node_redis transmet simplement les commandes à Redis. Ce que vous voulez faire est ceci pour le réglage en ligne du TTL client.set(key, value,'EX', ttl, callback) , selon la documentation de la commande SET .

De plus, la commande client.ttl() _get_ le temps de vivre ne le définit pas. Si vous voulez le faire _set_ le TTL, vous devez utiliser client.expire() .

Merci pour la correction.

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

juriansluiman picture juriansluiman  ·  3Commentaires

b96705008 picture b96705008  ·  7Commentaires

jackycchen picture jackycchen  ·  4Commentaires

gpascale picture gpascale  ·  4Commentaires

ghost picture ghost  ·  3Commentaires