redis.c、2311行目、不安定なブランチ:
/* 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
は、厳密に言えばより速くなるように思われますが、それほど大きくはありません。たぶん、私たちが話しているのは、ほんの一マイクロ秒の速さです。
2番目の質問はすでにほぼ回答済みですが、念のために言ってallkeys-lru
おきます。期限切れに設定されているキーの数、または有効期限が設定されているキーの数に違いはないようです。この例のインスタンスAとBはどちらも、キーがlruアルゴリズムによってパージされたときに同じパフォーマンスを示します。