日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

redis高级-内存淘汰策略

發布時間:2025/3/19 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 redis高级-内存淘汰策略 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

一、redis緩存過期淘汰策略

1.redis默認內存

2.修改redis內存

3.查看redis內存情況

二、redis內存超出了設置的最大值會怎么樣

1.設置1個字節之后再賦值,會爆OOM

三、內存淘汰策略

1.一個鍵過期了,是怎么刪除的

2.內存淘汰策略

3.修改內存淘汰策略

lru算法


一、redis緩存過期淘汰策略

1.redis默認內存

?? ?如果不設置最大內存大小或者設置最大內存大小為0,在64位操作系統下不限制內存大小,在32位操作系統下最多使用3GB內存

? ? 一般推薦redis設置內存為最大物理內存的四分之三

2.修改redis內存

①修改配置文件

②通過命令

3.查看redis內存情況

二、redis內存超出了設置的最大值會怎么樣

1.設置1個字節之后再賦值,會爆OOM

三、內存淘汰策略

出廠默認:noeviction-報錯OOM

1.一個鍵過期了,是怎么刪除的

①定時刪除(對CPU不友好,用處理器性能換取存儲空間)

②惰性刪除(對內存不友好)

③定期刪除(隨機抽查,也會有漏網之魚,會有一直沒抽取到的)

2.內存淘汰策略

lru:刪除最近最少使用的

lfu:刪除最少頻繁使用的的。

一般用第二個,allkeys-lru

3.修改內存淘汰策略

①配置文件

②命令

lru算法

是什么:

? ? LRU是Least?Recently?Used的縮寫,即最近最少使用,是一種常用的頁面置換算法,選擇最近最久未使用的數據予以淘汰。

1.面試題示例

LRU算法核心是哈希鏈表

使用LinkedHashMap實現LRU算法

package 作業; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Scanner; import java.util.Set;/*LRU是Least Recently Used 近期最少使用算法。 *通過HashLiekedMap實現LRU的算法的關鍵是,如果map里面的元素個數大于了緩存最大容量,則刪除鏈表頭元素 *//*public LinkedHashMap(int initialCapacity,float loadFactor,boolean accessOrder) *LRU參數參數: *initialCapacity - 初始容量。 *loadFactor - 加載因子(需要是按該因子擴充容量)。 *accessOrder - 排序模式( true) - 對于訪問順序(get一個元素后,這個元素被加到最后,使用了LRU 最近最少被使用的調度算法),對于插入順序,則為 false,可以不斷加入元素。 *//*相關思路介紹:* 當有一個新的元素加入到鏈表里面時,程序會調用LinkedHahMap類中Entry的addEntry方法,*而該方法又會 會調用removeEldestEntry方法,這里就是實現LRU元素過期機制的地方,* 默認的情況下removeEldestEntry方法只返回false,表示可以一直表鏈表里面增加元素,在這個里 *修改一下就好了。**/ /* 測試數據: 5 11 4 7 0 7 1 0 1 2 1 2 6 */import java.util.*; public class LRULinkedHashMap<K,V> extends LinkedHashMap<K,V>{ private int capacity; //初始內存容量LRULinkedHashMap(int capacity){ //構造方法,傳入一個參數super(16,0.75f,true); //調用LinkedHashMap,傳入參數 ,true是按照訪問順序,false是按照插入順序排 this.capacity=capacity; //傳遞指定的最大內存容量}@Overridepublic boolean removeEldestEntry(Map.Entry<K, V> eldest){ //,每加入一個元素,就判斷是size是否超過了已定的容量System.out.println("此時的size大小="+size());if((size()>capacity)){System.out.println("超出已定的內存容量,把鏈表頂端元素移除:"+eldest.getValue());}return size()>capacity; }public static void main(String[] args) throws Exception{Scanner cin = new Scanner(System.in);System.out.println("請輸入總共內存頁面數: ");int n = cin.nextInt();Map<Integer,Integer> map=new LRULinkedHashMap<Integer, Integer>(n);System.out.println("請輸入按順序輸入要訪問內存的總共頁面數: ");int y = cin.nextInt();System.out.println("請輸入按順序輸入訪問內存的頁面序列: ");for(int i=1;i<=y;i++){int x = cin.nextInt();map.put(x, x); }System.out.println("此時內存中包含的頁面數是有:");//用for-each語句,遍歷此時內存中的頁面并輸出for(java.util.Map.Entry<Integer, Integer> entry: map.entrySet()){System.out.println(entry.getValue());}} }

總結

以上是生活随笔為你收集整理的redis高级-内存淘汰策略的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。