讲述java中常见的几种缓存数据形式 并简单演示

1、HashMap

HashMap是Java中最常用的缓存数据的方式之一。它使用键值对的方式存储数据,通过键来快速查找和获取对应的值。可以使用put方法将数据放入HashMap中,使用get方法来获取数据。

只要没有手动删除或程序终止运行,缓存信息会一直存在

定义一个HashMap集合方式

java 复制代码
Map<String, String> 集合名称 = new HashMap<>();

加入数据

java 复制代码
cache.put("键", "值");

获取缓存数据

java 复制代码
集合名称.get("键");

根据键删除指定数据

java 复制代码
集合名.remove("键");

清空全部数据

java 复制代码
集合名..clear();

参考整体代码如下

java 复制代码
//定义一个HashMap  名称cache
Map<String, String> cache = new HashMap<>();
//向cache中添加一条数据 键key1 值value1
cache.put("key1", "value1");
//用System.out.println 输出键为key1的这条数据的值
System.out.println(cache.get("key1"));
//删除 键为 key1 的这一条数据
cache.remove("key1");
//用System.out.println 输出键为key1的这条数据的值 此时因为已经删除 值应该是null
System.out.println(cache.get("key1"));
//删除cache内所有的数据
cache.clear();

2、ConcurrentHashMap

ConcurrentHashMap是HashMap的线程安全版本,适用于多线程环境下的缓存操作。它使用分段锁来提高并发性能,不同的线程可以同时访问不同的分段,从而提高并发访问的效率。

ConcurrentHashMap 没有自动过期的设置 所以想让他自己过期你要自己写逻辑处理,然后他的消失情况除了项目停止运行之外还有就是当内存不足时系统操作会回收一些内存,就可能导致部分ConcurrentHashMap被回收

定义一个 ConcurrentHashMap 的方法

java 复制代码
ConcurrentMap<String, String> 名称 = new ConcurrentHashMap<>();

存入数据

java 复制代码
集合名称.put("键", "值");

取数据

java 复制代码
集合名称.get("键");

删除全局

java 复制代码
集合名称.clear();

参考代码如下

java 复制代码
//定义一个ConcurrentMap 名称cache
ConcurrentMap<String, String> cache = new ConcurrentHashMap<>();
//向cache中添加一条数据 键key1 值value1
cache.put("key1", "value1");
//用System.out.println 输出键为key1的这条数据的值
System.out.println(cache.get("key1"));
//删除 键为 key1 的这一条数据
cache.remove("key1");
//用System.out.println 输出键为key1的这条数据的值 此时因为已经删除 值应该是null
System.out.println(cache.get("key1"));
//删除cache内所有的数据
cache.clear();

3、Caffeine

Caffeine是一个高性能的缓存库,提供了各种缓存策略和配置选项。它可以自动管理缓存中的数据,包括过期时间、最大缓存大小等。

Caffeine有过期时间的设置,当达到时间则消失 内存超出时也会回收一定的Caffeine,当达到设置的大小之后Caffeine也会按照依据移除一些缓存 然后就是可以手动删除

要使用Caffeine需要注入依赖

xml 复制代码
<dependencies>
    <dependency>
        <groupId>com.github.ben-manes.caffeine</groupId>
        <artifactId>caffeine</artifactId>
        <version>2.9.0</version>
    </dependency>
</dependencies>

然后 定义一个

java 复制代码
Cache<String, String> cache = Caffeine.newBuilder()
                .expireAfterWrite(10, TimeUnit.MINUTES) // 设置缓存项的过期时间为10分钟
                .maximumSize(100) // 设置缓存容量为100
                .build();

这里 我们定义了一个 存在10分钟 存储100的缓存

名称为 cache

然后 存入数据 缓存名称.put("键","值")

java 复制代码
cache.put("key1", "value1");

获取数据 缓存名称.getIfPresent("键")

java 复制代码
System.out.println(cache.getIfPresent("key1"));

根据键删除指定数据 缓存名.invalidate("键");

java 复制代码
cache.invalidate("key1");

清除所有数据 缓存名.invalidateAll();

java 复制代码
cache.invalidateAll();

4、Ehcache

Ehcache是一个广泛使用的开源缓存库,支持分布式缓存、磁盘持久化等功能。它提供了丰富的配置选项和API,可以根据需求进行灵活的缓存管理。

此缓存的情况也差不多,可以设置过期时间 过期时间触发消失。 可手动删除消失。应用关闭后会消失。超过设置容量时 会按规范移除 内存超出时也会被回收一些

想使用Ehcache 需要注入依赖

xml 复制代码
 <dependency>
        <groupId>org.ehcache</groupId>
        <artifactId>ehcache</artifactId>
        <version>3.9.0</version>
    </dependency>

参考代码如下

java 复制代码
 // 创建一个CacheManager实例
CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder().build();
cacheManager.init();

// 创建一个Cache实例
Cache<String, String> cache = cacheManager.createCache("myCache",
        CacheConfigurationBuilder.newCacheConfigurationBuilder(String.class, String.class,
                ResourcePoolsBuilder.heap(100)));

// 向缓存中存放数据
cache.put("key", "value");

//用System.out.println 输出从cache中获取的指定键key对应的值
System.out.println(cache.get("key"));
//根据键key从缓存中删除指定数据
cache.remove("key");
//用System.out.println 输出从cache中获取的指定键key对应的值 因为已经删除此时应该是null
System.out.println(cache.get("key"));
//清空缓存
cacheManager.close();
相关推荐
默默coding的程序猿1 分钟前
1.北京三维天地公司-实施实习生
java·sql·技术支持·面经·实施·实施工程师·三维天地
亦陈不染4 分钟前
c#入门详解(刘铁锰)06 - 数据持久化:TXT文本保存、序列化与反序列化(附详细源码)
开发语言·计算机视觉·c#·wpf
ceclar12325 分钟前
C++Lambda表达式
开发语言·c++·算法
天天摸鱼的java工程师29 分钟前
解释 Spring 框架中 bean 的生命周期:一个八年 Java 开发的实战视角
java·后端
尤老师FPGA31 分钟前
LVDS系列32:Xilinx 7系 ADC LVDS接口参考设计(三)
android·java·ui
智启七月32 分钟前
谷歌 Gemini 3.0 正式发布:一键生成 Web OS,编程能力碾压竞品
人工智能·python
自由的疯32 分钟前
Java 如何学习 Jenkins?
java·架构
2401_8414956433 分钟前
【强化学习】动态规划算法
人工智能·python·算法·动态规划·强化学习·策略迭代·价值迭代
自由的疯34 分钟前
Java ‌认识Docker
java·架构
二进制coder37 分钟前
深入浅出:I²C多路复用器PCA9546详解 - 解决地址冲突,扩展你的I²C总线
c语言·开发语言·单片机