2017-03-09 7 views
0

J'utilise redisCommand de la bibliothèque hiredis de faire quelque chose comme ceci:HiRedis :: Comment insérer une chaîne vide dans la liste Redis à l'aide LPUSH

LPUSH list1 a b "" c d "" e 

où « » signifie que je veux insérer élément vide à la liste. Cela fonctionne bien quand je le fais depuis la ligne de commande sur redis mais quand je le passe comme une commande sur hiredis, ça ne marche pas et l'élément finit par être "" au lieu de vide. Un travail autour?

Voilà comment j'ai appelé redisCommand:

reply = (redisReply *) redisCommand(c,"LPUSH list1 a b c "" c d "" e); 

J'ai essayé de mettre des guillemets simples, etc antislashs aussi

+0

Comment avez-vous appelé redisComand? Un exemple? –

+0

Ajout de l'exemple –

Répondre

0

Vous pouvez utiliser des chaînes de sécurité binaires dans Redis. Continuez d'ajouter des chaînes binaires à votre liste à l'aide de la commande LPUSH, comme indiqué ci-dessous:

redisReply * réponse = redisCommand (contexte, "liste LPUSH1% b% b% b", "a", strlen ("a"), "", 0, "b", strlen ("b"));

La sortie sera:

127.0.0.1:6379> lrange list1 0 -1 
1) "b" 
2) "" 
3) "a" 

HTH, Swanand

+0

Le problème est que la liste est énorme et je veux me connecter à redis une seule fois –

0

Si le nombre d'éléments que vous voulez pousser à la liste est fixée: utiliser redisCommand avec les paramètres formatés

const char *list = "list-name"; 
const char *non_empty_val = "value"; 
const char *empty_val = ""; 
/* or use %b to push binary element, as the other answer mentioned. */ 
redisReply *reply = (redisReply*)redisCommand(redis, 
          "lpush %s %s %s", list, non_empty_val, empty_val); 

Si le nombre d'éléments est dynamique: utiliser redisCommandArgv

int argc = 4; /* number of arguments including command name. */ 

const char **argv = (const char**)malloc(sizeof(const char**) * argc); 
argv[0] = strdup("lpush"); 
argv[1] = strdup(list); 
argv[2] = strdup(non_empty_val); 
argv[3] = strdup(empty_val); 

/* specify the length of each argument. */ 
size_t *argv_len = (size_t*)malloc(sizeof(size_t) * argc); 
for (int i = 0; i < argc; ++i) 
    argv_len[i] = strlen(argv[i]); 

redisReply *reply = (redisReply*)redisCommandArgv(redis, argc, argv, argv_len);