当前位置: 首页 > news >正文

java缓存技术介绍

0fa945d6cc1f4902a1c31fe21a3ee7dd.jpg

 

一、Java缓存技术的基本概念

 

缓存类型:

 

本地缓存:数据存储在应用所在的服务器的内存中,访问速度非常快,但受限于服务器的内存大小。

分布式缓存:数据存储在多个服务器的内存中,通过一定的机制(如哈希算法)实现数据的分布式存储和访问,适用于大型分布式系统。

 

缓存策略:

 

LRU(Least Recently Used):最近最少使用策略,当缓存达到最大容量时,移除最近最少使用的数据。

LFU(Least Frequently Used):最不经常使用策略,移除访问频率最低的数据。

FIFO(First In First Out):先进先出策略,按照数据进入缓存的顺序进行移除。

 

缓存失效策略:

 

TTL(Time To Live):数据在缓存中存活的时间,超过这个时间就会被移除。

TTI(Time To Idle):数据在空闲(即没有被访问)一段时间后,就会被移除。

二、Java中常见的缓存实现

Guava Cache:

Google提供的一个开源Java缓存库,提供了强大的缓存功能,包括自动加载、缓存回收、统计信息等。

示例代码:

java

     Cache<String, String> cache = CacheBuilder.newBuilder()

         .maximumSize(100) // 设置缓存的最大容量

         .expireAfterWrite(10, TimeUnit.MINUTES) // 设置数据在写入10分钟后失效

         .build();

 

     cache.put("key", "value");

     String value = cache.getIfPresent("key");

     

 

Ehcache:

 

一个开源的Java分布式缓存框架,提供了丰富的缓存管理功能,支持内存和磁盘存储,以及分布式缓存。

可以通过配置文件或注解来配置缓存。

 

Caffeine:

 

一个高性能的Java缓存库,由Ben-Manes开发,是Guava Cache的替代者,提供了更高的性能和更多的功能。

示例代码:

java

     Cache<String, String> cache = Caffeine.newBuilder()

         .maximumSize(100)

         .expireAfterWrite(10, TimeUnit.MINUTES)

         .build();

 

     cache.put("key", "value");

     String value = cache.getIfPresent("key");

     

Redis:

虽然Redis是一个远程的分布式内存数据库,但它经常被用作Java应用的缓存层。

提供了丰富的数据结构(如字符串、列表、集合、哈希等)和高级功能(如发布/订阅、事务等)。

通过Jedis、Lettuce等Java客户端库可以方便地操作Redis。

三、使用缓存的注意事项

 

缓存击穿:当某个热点数据失效时,大量请求同时访问该数据,导致数据库压力骤增。可以通过设置热点数据的永久缓存或加锁来解决。

 

缓存雪崩:当大量缓存数据同时失效时,大量请求会直接访问数据库,导致数据库崩溃。可以通过设置不同的失效时间、随机失效时间或过期数据预热来解决。

 

缓存预热:在应用启动时,将常用的数据加载到缓存中,以减少应用启动后的首次访问延迟。

 

缓存一致性:在数据更新时,需要确保缓存中的数据与数据库中的数据保持一致。可以通过缓存失效策略(如先失效再更新数据库)或缓存更新策略(如先更新数据库再更新缓存)来解决。

 


http://www.mrgr.cn/news/53342.html

相关文章:

  • 如何实现采购数字化?
  • C语言笔记20
  • IO编程--多线程实现文件拷贝
  • 爬虫逆向-js进阶(续写,搭建网站)
  • 刘诗诗亮相 VOGUE 时尚盛典,三套造型出尘绝伦,美丽再惊艳众人
  • 业务诊断简介
  • [强网杯 2019]随便注1
  • 实验21:红外遥控实验
  • 通过比较list与vector在简单模拟实现时的不同进一步理解STL的底层
  • Hikyuu教程 | 滚动回测与滚动寻优系统
  • django5入门【02】创建新的django程序
  • win11 虚拟桌面切换后任务栏图标消失解决【中文互联网首发】
  • 强化学习与深度强化学习:深入解析与代码实现
  • 【MySQL】MySQL的简单了解详解SQL分类数据库的操纵方法
  • I\O进程线程(Day30)
  • 宽表和窄表
  • vb操作电子表格 增加工作表 工作表数据合并
  • 【Linux】Anaconda下载安装配置Pytorch安装配置(保姆级)
  • [Python基础](2) 基本数据类型
  • 车辆数据的提取、定位和融合(其三.一 共十二篇)子映射和时间加权