gpt4 book ai didi

performance - Redis 最大内存策略 : performances of volatile-lru vs allkeys-lru

转载 作者:IT王子 更新时间:2023-10-29 05:57:42 26 4
gpt4 key购买 nike

假设redis 实例中的所有键都设置了过期时间,volatile-lru 和allkeys-lru 是相似的。但是,当删除 key 时,两者之间是否存在显着的性能差异?

奖励问题:

在配置了 allkeys-lru 策略的 2 个不同实例之间,具有相同的内容和相同的配置,除了:

  • 实例 A 的所有键都设置了过期(不同的过期值)
  • 实例 B 没有设置过期的键

除了实例 A 中由于过期位而产生的内存开销外,当通过 allkeys-lru 算法删除 key 时,两者之间是否存在性能差异?

在这两种情况下,我都在谈论 64 位 linux 上的 redis 2.4.x 实例,当达到最大内存时,maxmemory = 3Gb 具有 4-5000 个键(大多数键是哈希值)。

谢谢

最佳答案

redis.c, line 2311, unstable branch :

/* volatile-lru and allkeys-lru policy */
else if (server.maxmemory_policy == REDIS_MAXMEMORY_ALLKEYS_LRU ||
server.maxmemory_policy == REDIS_MAXMEMORY_VOLATILE_LRU)
{
for (k = 0; k < server.maxmemory_samples; k++) {
sds thiskey;
long thisval;
robj *o;

de = dictGetRandomKey(dict);
thiskey = dictGetKey(de);
/* When policy is volatile-lru we need an additonal lookup
* to locate the real key, as dict is set to db->expires. */
if (server.maxmemory_policy == REDIS_MAXMEMORY_VOLATILE_LRU)
de = dictFind(db->dict, thiskey);
o = dictGetVal(de);
thisval = estimateObjectIdleTime(o);

/* Higher idle time is better candidate for deletion */
if (bestkey == NULL || thisval > bestval) {
bestkey = thiskey;
bestval = thisval;
}
}
}

似乎所有事情都相同 allkeys-lru 严格来说会更快,但不会显着。很可能我们谈论的只是快了 微秒 的几分之一。

第二个问题几乎已经得到回答,但以防万一:看起来它对 allkeys-lru 有多少 key 设置为过期没有影响,或者如果有的话。当 lru 算法清除 key 时,您的示例中的实例 A 和 B 都会看到相同的性能。

关于performance - Redis 最大内存策略 : performances of volatile-lru vs allkeys-lru,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12892396/

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