Java中Redis的LRU缓存机制怎么实现
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,本篇内容介绍了"Java中Redis的LRU缓存机制怎么实现"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有
千家信息网最后更新 2025年01月31日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安全错误
数据库的锁怎样保障安全
服务器装不上系统
西城区进口软件开发调试
重庆环保软件开发
济南领航网络技术有限公司
软件开发生命周期问题定义
做动画电影需要服务器
计算机网络技术能升本的专业
建立服务端并且访问数据库
西安向南网络技术
什么语言应用到网络技术
国家网络安全宣传周工作协调会
加油站智能管理系统软件开发
镇江海航软件开发常见问题
国家网络安全周 文件学习
DNS服务器解析异常
h3c服务器连接不上
艾昆纬数据库用户
河北企业软件开发服务号选择
低层数据库
尹为民数据库原理和技术课件
vb数据库有写入及时提示
保定市鼎点网络技术有限公司
网络安全论文参考文献自动
帆软集群配置文件服务器
湛江pc软件开发定制
显卡服务器主板和普通主板通用吗
医院网络安全领导小组名单
济南阳光互联网科技有限公司
hp服务器如何进入救援模式
单位网络安全问题说明材料怎么写