iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >java怎么实现Redis的LRU缓存机制
  • 710
分享到

java怎么实现Redis的LRU缓存机制

2023-06-20 12:06:27 710人浏览 独家记忆
摘要

本篇内容主要讲解“java怎么实现Redis的LRU缓存机制”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java怎么实现Redis的LRU缓存机制”吧!目录LRU概述使用LinkedHashM

本篇内容主要讲解“java怎么实现Redis的LRU缓存机制”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java怎么实现Redis的LRU缓存机制”吧!

目录
  • LRU概述

  • 使用LinkedHashMap实现 

  • 使用LinkedHashMap简单方法实现

  • 链表+hashmap

LRU概述

最近使用的放在前面,最近没用的放在后面,如果来了一个新的数,此时内存满了,就需要把旧的数淘汰,那为了方便移动数据,肯定就得使用链表类似的数据结构,再加上要判断这条数据是不是最新的或者最旧的那么应该也要使用hashmap等key-value形式的数据结构。

使用LinkedHashMap实现 

package thread;import java.util.LinkedHashMap;import java.util.Map; public class LRUCacheTest {    int capacity;    Map<Integer,Integer> map;     public LRUCacheTest(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) {        LRUCacheTest lruCache = new LRUCacheTest(10);        for (int i = 0; i < 10; i++) {            lruCache.map.put(i,i);            System.out.print(lruCache.map.size()+"\t");        }        System.out.println();        System.out.println(lruCache.map);        lruCache.put(10,200);        System.out.println(lruCache.map);        lruCache.put(11,100);        System.out.println(lruCache.map);        lruCache.get(2);        System.out.println(lruCache.map);    } }

java怎么实现Redis的LRU缓存机制

结果来看是正确的,距离当前时间最远的数据被淘汰

使用LinkedHashMap简单方法实现

LinkedHashMap是维护了双向链表的HashMap,保持了插入元素的顺序。

LinkedHashMap提供了一个钩子方法,在新插入元素后可以决定是否删除最老的元素。

复写removeEldestEntry实现

package thread;import java.util.LinkedHashMap;import java.util.Map; public class LRUByLinkedHashMap extends LinkedHashMap<Integer,Integer> {        private int maxSize;     public LRUByLinkedHashMap(int maxSize) {        // 容量为最大值/0.75,即最大负载容量为maxSize        // accessOrder=true  根据查询排序,即最近被使用的放到后面        super((int) Math.ceil(maxSize / 0.75) + 1, 0.75f, true);        this.maxSize = maxSize;    }         @Override    protected boolean removeEldestEntry(Map.Entry<Integer, Integer> eldest) {        return size() > maxSize;    }     public static void main(String[] args) {        LRUByLinkedHashMap hashMap = new LRUByLinkedHashMap(10);        for (int i = 0; i < 10; i++) {            hashMap.put(i,i);            System.out.print(hashMap.size()+"\t");        }        System.out.println();        System.out.println(hashMap);        hashMap.put(10,200);        System.out.println(hashMap);        hashMap.put(11,100);        System.out.println(hashMap);        hashMap.get(10);        System.out.println(hashMap);    } }

java怎么实现Redis的LRU缓存机制

双链表+hashmap

package thread;import java.util.HashMap;import java.util.Map; public class LRURedis {    private int capacity;    private Map<Integer,Listnode> map;    private ListNode head;    private ListNode tail;     public LRURedis(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;        }    }}

到此,相信大家对“java怎么实现Redis的LRU缓存机制”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: java怎么实现Redis的LRU缓存机制

本文链接: https://www.lsjlt.com/news/296562.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java怎么实现Redis的LRU缓存机制
    本篇内容主要讲解“java怎么实现Redis的LRU缓存机制”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java怎么实现Redis的LRU缓存机制”吧!目录LRU概述使用LinkedHashM...
    99+
    2023-06-20
  • Java手动实现Redis的LRU缓存机制
    目录前言第一种实现(使用LinkedHashMap)第二种实现(双链表+hashmap)补充前言 最近在逛博客的时候看到了有关Redis方面的面试题,其中提到了Redis在内存达到...
    99+
    2024-04-02
  • 如何实现Redis的LRU缓存机制
    这篇文章给大家分享的是有关如何实现Redis的LRU缓存机制的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言最近在逛博客的时候看到了有关Redis方面的面试题,其中提到了Redis在内存达到最大限制的时候会使用...
    99+
    2023-06-14
  • 浅谈java如何实现Redis的LRU缓存机制
    目录LRU概述使用LinkedHashMap实现 使用LinkedHashMap简单方法实现双链表+hashmapLRU概述 最近使用的放在前面,最近没用的放在后面,如果...
    99+
    2024-04-02
  • 手动实现Redis的LRU缓存机制示例详解
    前言 最近在逛博客的时候看到了有关Redis方面的面试题,其中提到了Redis在内存达到最大限制的时候会使用LRU等淘汰机制,然后找了这方面的一些资料与大家分享一下。 LRU总体大概...
    99+
    2024-04-02
  • Redis的LRU缓存淘汰算法怎么实现
    本文小编为大家详细介绍“Redis的LRU缓存淘汰算法怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Redis的LRU缓存淘汰算法怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起...
    99+
    2024-04-02
  • Java实现LRU缓存的实例详解
    Java实现LRU缓存的实例详解1.CacheCache对于代码系统的加速与优化具有极大的作用,对于码农来说是一个很熟悉的概念。可以说,你在内存中new 了一个一段空间(比方说数组,list)存放一些冗余的结果数据,并利用这些数据完成了以空...
    99+
    2023-05-31
    java lru缓存 ava
  • Redis如何实现LRU缓存淘汰算法
    小编给大家分享一下Redis如何实现LRU缓存淘汰算法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1 标准LRU的实现原理LR...
    99+
    2024-04-02
  • 怎么在Redis中实现缓存失效机制
    在Redis中,可以通过设置过期时间来实现缓存失效机制。可以使用EXPIRE命令来设置某个键的过期时间,当到达过期时间时,Redis...
    99+
    2024-03-11
    Redis
  • redis怎么做缓存机制
    Redis是一个开源的、高性能的键值数据库,它可以用作缓存机制来提高系统的访问速度。以下是使用Redis作为缓存机制的一些步骤:1....
    99+
    2023-09-06
    redis
  • redis的缓存机制
    redis提供了一种高效的缓存机制,使用键值对结构存储数据,并使用不同的数据结构来优化不同类型数据存储。当缓存达到容量限制时,它使用各种淘汰策略(如lru、lfu、ttl)来淘汰数据。r...
    99+
    2024-04-19
    redis 键值对
  • Java中怎么实现日志缓存机制
    今天就跟大家聊聊有关Java中怎么实现日志缓存机制,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java 日志机制的介绍Java 日志机制在很多文章中都有介绍,为了便于后面文章部分的...
    99+
    2023-06-17
  • LeetCode中LRU 缓存机制的示例分析
    这篇文章主要介绍了LeetCode中LRU 缓存机制的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。题目描述运用你所掌握的数据结构,设计和实现一个  LRU...
    99+
    2023-06-19
  • Java如何实现LRU缓存淘汰算法
    这篇文章主要介绍了Java如何实现LRU缓存淘汰算法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。概述LRU 算法全称为 Least Recently Used 是一种常见的...
    99+
    2023-06-15
  • java实现LRU缓存淘汰算法的方法
    LRU算法:最近最少使用淘汰算法(Least Recently Used)。LRU是淘汰最长时间没有被使用的缓存(即使该缓存被访问的次数最多)。 如何实现LRU缓存淘汰算法 场景: ...
    99+
    2024-04-02
  • Java实现LRU缓存算法的参考示例
    目录一、什么是 LRU二、Java 实现 LRU 缓存算法一、什么是 LRU LRU(Least Recently Used,最近最少使用)是...
    99+
    2023-05-20
    Java 算法 Java LRU缓存算法 Java LUR
  • spring redis注解如何实现缓存机制
    这篇文章给大家分享的是有关spring redis注解如何实现缓存机制的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。1、xml配置 <bean id="poolC...
    99+
    2024-04-02
  • 怎么实现redis缓存
    这篇文章主要介绍了怎么实现redis缓存的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么实现redis缓存文章都会有所收获,下面我们一起来看看吧。1、使用宝塔面板先搭建好微擎...
    99+
    2024-04-02
  • redis缓存机制是什么
    redis 的缓存机制通过将数据副本存储在内存中来加速访问,提高应用程序性能。其核心步骤包括:数据写入时存储在内存中;读取时首先检查内存,存在则直接返回,不存在则从持久化存储加载;设置过...
    99+
    2024-04-08
    redis 数据访问 持久化存储
  • NoSQL中的缓存机制怎么实现
    在NoSQL中,缓存机制可以通过以下几种方式实现: 使用内存缓存:将数据存储在内存中,减少读写操作的时间。可以使用缓存库如Red...
    99+
    2024-05-07
    NoSQL
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作