memcached 的LRU算法實現(xiàn):
時間:2022-03-09 05:27:01 | 來源:行業(yè)動態(tài)
時間:2022-03-09 05:27:01 來源:行業(yè)動態(tài)
每個節(jié)點一把鎖保護節(jié)點數(shù)據(jù)和索引
LRU鏈表分為hot、warm和cold三個子鏈表,大小比例為 32:32:34
每個子鏈表一把全局鎖,maintainer 線程根上述比例維持鏈表長度時要加全局鎖
節(jié)點訪問時只需要加節(jié)點鎖同時標記為active 并不移動解決了鎖沖突問題,而且分三個子鏈表配合制定的訪問策略解決了局部性差的場景。但是只是由maintainer 線程根據(jù) active 表示來判斷是否移動到 head, 過度的犧牲LRU特性會造成熱點數(shù)據(jù)被淘汰導(dǎo)致命中率低。