2012-10-15 27 views
5

giả sử tất cả các khóa trong một thể hiện redis có tập hết hạn, volatile-lru và allkeys-lru tương tự nhau. Nhưng có một sự khác biệt hiệu năng có ý nghĩa giữa 2 khi một phím được lấy ra?Redis maxmemory-policy: biểu diễn của volatile-lru vs allkeys-lru

Bonus câu hỏi:

giữa 2 trường hợp riêng biệt cấu hình với các chính sách allkeys-LRU, có cùng nội dung và cùng cấu hình, ngoại trừ:

  • Instance A có tất cả phím của nó với một hết hạn thiết lập (các giá trị khác nhau hết hạn)
  • Ví dụ B có không có khóa nào với bộ hết hạn

Ngoài chi phí bộ nhớ trong ví dụ A do các bit hết hạn, có sự khác biệt hiệu suất giữa 2 khi khóa được xóa bởi thuật toán allkeys-lru không?

Trong cả hai trường hợp, tôi đang nói về trường hợp của redis 2.4.x trên Linux 64 bit với maxmemory = 3Gb với 4-5000 phím khi đạt đến maxmemory (hầu hết các khóa là băm).

Cảm ơn

Trả lời

12

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

Nó có vẻ như tất cả mọi thứ là như nhau allkeys-lru sẽ được nói đúng nhanh hơn, nhưng không bởi một cường độ đáng kể. Rất có thể chúng ta đang nói về không nhiều hơn một phần nhỏ hơn một giây micro giây nhanh hơn.

Câu hỏi thứ hai đã được trả lời khá nhiều, nhưng chỉ trong trường hợp: có vẻ như không có sự khác biệt với allkeys-lru số lượng khóa được đặt hết hạn hoặc nếu có. Cả hai trường hợp A và B trong ví dụ của bạn sẽ thấy hiệu suất tương tự khi một khóa được thanh toán bằng thuật toán lru.

+0

Cảm ơn bạn đã trả lời rõ ràng! – colinux

+0

Trích dẫn mã để trả lời chắc chắn là tuyệt vời :-) – antirez

+0

@antirez nhận được một bình luận từ một người viết nó thậm chí còn lạnh hơn :) – Mahn