Java中Redis的LRU缓存机制怎么实现
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,本篇内容介绍了"Java中Redis的LRU缓存机制怎么实现"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有
千家信息网最后更新 2025年11月08日Java中Redis的LRU缓存机制怎么实现
本篇内容介绍了"Java中Redis的LRU缓存机制怎么实现"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
第一种实现(使用LinkedHashMap)
public class LRUCache { int capacity; Map map; public LRUCache(int capacity){ this.capacity = capacity; map = new LinkedHashMap<>(); } public int get(int key){ //如果没有找到 if (!map.containsKey(key)){ return -1; } //找到了就刷新数据 Integer value = map.remove(key); map.put(key,value); return value; } public void put(int key,int value){ if (map.containsKey(key)){ map.remove(key); map.put(key,value); return; } map.put(key,value); //超出capacity,删除最久没用的即第一个,或者可以复写removeEldestEntry方法 if (map.size() > capacity){ map.remove(map.entrySet().iterator().next().getKey()); } } public static void main(String[] args) { LRUCache lruCache = new LRUCache(10); for (int i = 0; i < 10; i++) { lruCache.map.put(i,i); System.out.println(lruCache.map.size()); } System.out.println(lruCache.map); lruCache.put(10,200); System.out.println(lruCache.map); } 第二种实现(双链表+hashmap)
public class LRUCache { private int capacity; private Mapmap; private ListNode head; private ListNode tail; public LRUCache2(int capacity){ this.capacity = capacity; map = new HashMap<>(); head = new ListNode(-1,-1); tail = new ListNode(-1,-1); head.next = tail; tail.pre = head; } public int get(int key){ if (!map.containsKey(key)){ return -1; } ListNode node = map.get(key); node.pre.next = node.next; node.next.pre = node.pre; return node.val; } public void put(int key,int value){ if (get(key)!=-1){ map.get(key).val = value; return; } ListNode node = new ListNode(key,value); map.put(key,node); moveToTail(node); if (map.size() > capacity){ map.remove(head.next.key); head.next = head.next.next; head.next.pre = head; } } //把节点移动到尾巴 private void moveToTail(ListNode node) { node.pre = tail.pre; tail.pre = node; node.pre.next = node; node.next = tail; } //定义双向链表节点 private class ListNode{ int key; int val; ListNode pre; ListNode next; //初始化双向链表 public ListNode(int key,int val){ this.key = key; this.val = val; pre = null; next = null; } }} 补充
像第一种方式,如果复写removeEldestEntry会更简单,这里简单的展示一下
public class LRUCache extends LinkedHashMap { private int capacity; @Override protected boolean removeEldestEntry(Map.Entry eldest) { return size() > capacity; }} "Java中Redis的LRU缓存机制怎么实现"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
机制
缓存
内容
双向
更多
知识
节点
实用
学有所成
接下来
双链
困境
实际
尾巴
情况
数据
文章
方式
方法
案例
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
正拨着电话无法连接到服务器
网络安全含金量最高的认证
用循环导出数据库
初中学校网络安全管理规章制度
北京网络安全执法
数据库招标方案
微信后台服务器故障
我的世界1.14服务器怎么出售
c 开发学什么软件开发
易云游网络技术和蚂蚁
vba数据库速度
从事网络安全管理
数据库备份到另外一个服务器脚本
江西服务器电源哪家靠谱
兴乐网络技术6
加强两会网络安全保障
最小ftp服务器
mysql数据库进程
网络安全防范主要方面
ie网络安全证书阻止
我的世界宝可梦服务器阿尔宙斯
微信后台服务器故障
asm磁盘组导入新数据库
浙江商业软件开发市价
国家数据库怎么写参考文献
乳腺图像数据库面向对象
软件开发一年可以考什么证
台湾省ipfs服务器配置
达芬奇恢复数据库初始化失败
上海牛邦网络技术