* 在 redis 中,允許用戶設置最大使用內存大小maxmemory,默認爲0,沒有指定最大緩存,如果有新的數據添加,超過最大內存,則會使redis崩潰,所以一定要設置。
* redis 內存數據集大小上升到一定大小的時候,就會實行數據淘汰策略。
redis淘汰策略配置:maxmemory-policy voltile-lru,支持熱配置
LRU(Least recently used,最近最少使用)算法根據數據的歷史訪問記錄來進行淘汰數據,其核心思想是「如果數據最近被訪問過,那麼將來被訪問的機率也更高」。
最常見的實現是使用一個鏈表保存緩存數據,詳細算法實現如下:
1. 新數據插入到鏈表頭部;
2. 每當緩存命中(即緩存數據被訪問),則將數據移到鏈表頭部;
3. 當鏈表滿的時候,將鏈表尾部的數據丟棄。
在Java中可以使用LinkHashMap去實現LRU。
【命中率】
當存在熱點數據時,LRU的效率很好,但偶發性的、週期性的批量操作會導致LRU命中率急劇下降,緩存污染情況比較嚴重。
【複雜度】
實現簡單。
【代價】
命中時需要遍歷鏈表,找到命中的數據塊索引,然後需要將數據移到頭部