Java 使用LRUmap设计一个简单的缓存场景

简介: Java 使用LRUmap设计一个简单的缓存场景

前言


 

LRUmap的作用是啥,Least Recently Used  最近最少使用的-淘汰。

那么该篇内容即是给初学者介绍一下LRUmap的使用。


正文


 

在该篇文章里,我们使用的LRUmap 来自:


import org.apache.commons.collections4.map.LRUMap;


maven依赖:


 

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-collections4</artifactId>
            <version>4.4</version>
        </dependency>


结合实例来介绍LRUmap的使用:


实例1


image.png


可以看到,我们new了一个LRUMap,设置最大保留的值数量为 3 个。


也就是说,当我们往 LRUMap里面 放入的值超过3,就会触发淘汰机制,按照最近未使用的顺序去淘汰多余的值,保持永远只剩下最近使用的 3个值。


实例里的的代码,我们丢了4个key -value进去,那么最近未使用的,会被淘汰的,显然就是最早丢进去的key ‘A’。


所以该实例运行结果(A 被淘汰了):

image.png


紧接着看再看这个实例:

 

实例2


image.png


可以看到这个代码,A 被使用了一下。 那么 最近未被使用的key 就显然是key ‘B’ 了 。 所以当插入LRUMap的值超过设置的最大保留上限,被淘汰的就是key ‘B’ :


image.png


通过这两个简单的实例,想必大家很轻松地了解到了LRUMap的作用了,那么利用这个LRUMap来设计一些简单的小缓存,就非常简单了。


例如,


做一个简单的用户最近搜索使用的六个搜索词 ;


做一个简单的最近登录的用户的手机号/账户;


做一个简单的... 很多小的使用场景,大家都可以自己利用这个‘最近未使用’ 淘汰机制来进行业务场景实现。


看完该篇,你是不是对LRU缓存淘汰机制有了个初步的认知? 感兴趣的可以再去深挖一下实现原理。

相关文章
|
27天前
|
存储 缓存 Java
Java中的分布式缓存与Memcached集成实战
通过在Java项目中集成Memcached,可以显著提升系统的性能和响应速度。合理的缓存策略、分布式架构设计和异常处理机制是实现高效缓存的关键。希望本文提供的实战示例和优化建议能够帮助开发者更好地应用Memcached,实现高性能的分布式缓存解决方案。
39 9
|
2月前
|
安全 算法 Java
Java CAS原理和应用场景大揭秘:你掌握了吗?
CAS(Compare and Swap)是一种乐观锁机制,通过硬件指令实现原子操作,确保多线程环境下对共享变量的安全访问。它避免了传统互斥锁的性能开销和线程阻塞问题。CAS操作包含三个步骤:获取期望值、比较当前值与期望值是否相等、若相等则更新为新值。CAS广泛应用于高并发场景,如数据库事务、分布式锁、无锁数据结构等,但需注意ABA问题。Java中常用`java.util.concurrent.atomic`包下的类支持CAS操作。
83 2
|
3月前
|
安全 Java 数据安全/隐私保护
有哪些场景不适合使用Java反射机制
Java反射机制虽强大,但并非万能。在性能要求极高、安全性严格控制、类结构复杂多变或对象创建频繁的场景下,使用反射可能带来性能下降、安全风险增加等问题,应谨慎选择。
96 11
|
3月前
|
缓存 监控 Java
Java 线程池在高并发场景下有哪些优势和潜在问题?
Java 线程池在高并发场景下有哪些优势和潜在问题?
|
4月前
|
Java 数据处理
|
4月前
|
存储 缓存 数据库
缓存技术有哪些应用场景呢
【10月更文挑战第19天】缓存技术有哪些应用场景呢
|
4月前
|
缓存 JavaScript 前端开发
Java 如何确保 JS 不被缓存
【10月更文挑战第19天】在 Java 中,可以通过设置 HTTP 响应头来确保 JavaScript 文件不被浏览器缓存。方法包括:1. 使用 Servlet 设置响应头,通过 `doGet` 方法设置 `Expires`、`Cache-Control` 和 `Pragma` 头;2. 在 Spring Boot 中配置拦截器,通过 `NoCacheInterceptor` 类和 `WebConfig` 配置类实现相同功能。这两种方法都能确保每次请求都能获取到最新的 JavaScript 内容。
|
4月前
|
缓存 JavaScript 前端开发
Java 如何确保 JS 不被缓存
大家好,我是 V 哥。本文探讨了 Java 后端确保 JavaScript 不被缓存的问题,分析了文件更新后无法生效、前后端不一致、影响调试与开发及安全问题等场景,并提供了使用版本号、设置 HTTP 响应头、配置静态资源缓存策略和使用 ETag 等解决方案。最后讨论了缓存的合理使用及其平衡方法。
119 0
|
4月前
|
消息中间件 前端开发 Java
java高并发场景RabbitMQ的使用
java高并发场景RabbitMQ的使用
155 0
|
4月前
|
Java 数据处理 数据库
Java多线程的理解和应用场景
Java多线程的理解和应用场景
104 1