Je vous écris un programme simple pour tester Redis:comportement de commande étrange Redis SET
#include <hiredis.h>
#include <cstdio>
int main()
{
redisContext * c = redisConnect("127.0.0.1", 6379);
redisReply * reply;
reply = redisCommand(c, "FLUSHALL");
freeReplyObject(reply);
for(long int i = 0; i <= 1000000; i++)
{
char query[64];
sprintf(query, "SET %ld \"string%ld\"", i, i);
reply = redisCommand(c, query);
freeReplyObject(reply);
if(!(i % 100000))
{
reply = redisCommand(c, "DBSIZE");
int res = reply->integer;
freeReplyObject(reply);
printf("%s\n", query);
printf("dbsize: %d\n", res);
}
}
redisFree(c);
}
Il faut mettre 1000000 clés dans db, mais la sortie est la suivante:
SET 0 "string0"
dbsize: 1
SET 100000 "string100000"
dbsize: 100001
SET 200000 "string200000"
dbsize: 200001
SET 300000 "string300000"
dbsize: 300001
SET 400000 "string400000"
dbsize: 400001
SET 500000 "string500000"
dbsize: 500001
SET 600000 "string600000"
dbsize: 600001
SET 700000 "string700000"
dbsize: 700001
SET 800000 "string800000"
dbsize: 779479
SET 900000 "string900000"
dbsize: 779479
SET 1000000 "string1000000"
dbsize: 779479
Ainsi, dans un moment (généralement après environ 600000) Redis arrête d'ajouter des enregistrements. Quelle peut être la raison d'un tel comportement?
Merci, cela m'a vraiment aidé. La vérification des erreurs était inutilisable - il n'y avait pas d'erreurs. – user1498131