gpt4 book ai didi

redis - 奇怪的 Redis SET 命令行为

转载 作者:可可西里 更新时间:2023-11-01 11:02:54 25 4
gpt4 key购买 nike

我正在编写一个用于测试 Redis 的简单程序:

#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);
}

它应该将 1000000 个键放入数据库,但输出如下:

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

所以在某一时刻(通常在 600000 个键之后)Redis 停止添加记录。这种行为的原因可能是什么?

最佳答案

您不检查代码中的错误,因此很难诊断问题。您应该在释放回复对象之前分析输出。

最可能的原因是您的 Redis 实例已配置了最大内存限制,而您已达到此限制。您可能需要检查配置文件,或使用以下命令:

config get maxmemory

零值意味着没有限制。否则,限制以字节数表示。

关于redis - 奇怪的 Redis SET 命令行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11307159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com