Redis的內(nèi)存淘汰策略問題

Redis配置內(nèi)存
//設置Redis最大占用內(nèi)存大小為100Mmaxmemory100mb
//設置Redis最大占用內(nèi)存大小為100M127.0.0.1:6379> config set maxmemory 100mb//獲取設置的Redis能使用的最大內(nèi)存大小127.0.0.1:6379> config get maxmemory
Redis的內(nèi)存淘汰
127.0.0.1:6379> config get maxmemory-policy
maxmemory-policy allkeys-lru
127.0.0.1:6379> config set maxmemory-policy allkeys-lru
LRU算法
public class LRUCache{ //容量private int capacity;//當前有多少節(jié)點的統(tǒng)計private int count;//緩存節(jié)點private Map> nodeMap; private Nodehead; private Nodetail; public LRUCache(int capacity) {if (capacity < 1) {throw new IllegalArgumentException(String.valueOf(capacity));}this.capacity = capacity;this.nodeMap = new HashMap<>();//初始化頭節(jié)點和尾節(jié)點,利用哨兵模式減少判斷頭結(jié)點和尾節(jié)點為空的代碼Node headNode = new Node(null, null);Node tailNode = new Node(null, null);headNode.next = tailNode;tailNode.pre = headNode;this.head = headNode;this.tail = tailNode;}public void put(k key, v value) {Nodenode = nodeMap.get(key); if (node == null) {if (count >= capacity) {//先移除一個節(jié)點removeNode();}node = new Node<>(key, value);//添加節(jié)點addNode(node);} else {//移動節(jié)點到頭節(jié)點moveNodeToHead(node);}}public Nodeget(k key) { Nodenode = nodeMap.get(key); if (node != null) {moveNodeToHead(node);}return node;}private void removeNode() {Node node = tail.pre;//從鏈表里面移除removeFromList(node);nodeMap.remove(node.key);count--;}private void removeFromList(Nodenode) { Node pre = node.pre;Node next = node.next;pre.next = next;next.pre = pre;node.next = null;node.pre = null;}private void addNode(Nodenode) { //添加節(jié)點到頭部addToHead(node);nodeMap.put(node.key, node);count++;}private void addToHead(Nodenode) { Node next = head.next;next.pre = node;node.next = next;node.pre = head;head.next = node;}public void moveNodeToHead(Nodenode) { //從鏈表里面移除removeFromList(node);//添加節(jié)點到頭部addToHead(node);}class Node{ k key;v value;Node pre;Node next;public Node(k key, v value) {this.key = key;this.value = value;}}}
LRU在Redis中的實現(xiàn)
LFU算法
---END--- 重磅!碼農(nóng)突圍-技術交流群已成立 掃碼可添加碼農(nóng)突圍助手,可申請加入碼農(nóng)突圍大群和細分方向群,細分方向已涵蓋:Java、Python、機器學習、大數(shù)據(jù)、人工智能等群。 一定要備注:開發(fā)方向+地點+學校/公司+昵稱(如Java開發(fā)+上海+拼夕夕+猴子),根據(jù)格式備注,可更快被通過且邀請進群 ▲長按加群 推薦閱讀
? ?Google 再見 Java ???面試官:我把數(shù)據(jù)庫部署在Docker容器內(nèi),你覺得如何? ???華為阿里下班時間曝光:所有的光鮮,都有加班的味道 ???永遠不要在代碼中使用「User」這個單詞! ?? 面試:如何決定使用 HashMap 還是 TreeMap? ?? 微軟蘇州集體抵制來自阿里、華為的跳槽者:請停止你的“奮斗逼”行為!網(wǎng)友:看到 955 不加班的公司名單,我酸了 最近面試BAT,整理一份面試資料《Java面試BAT通關手冊》,覆蓋了Java核心技術、JVM、Java并發(fā)、SSM、微服務、數(shù)據(jù)庫、數(shù)據(jù)結(jié)構(gòu)等等。 獲取方式:點“在看”,關注公眾號并回復?BAT?領取,更多內(nèi)容陸續(xù)奉上。 如有收獲,點個在看,誠摯感謝 明天見(??ω??)??
評論
圖片
表情

