一、springboot ehcahe3实现步骤

  EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认CacheProvider。

  Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点。

1.1、主要特性:

  快速、简单、多种缓存策略

  缓存数据有两级:内存和磁盘,因此无需担心容量问题
  缓存数据会在虚拟机重启的过程中写入磁盘
  可以通过RMI、可插入API等方式进行分布式缓存
  具有缓存和缓存管理器的侦听接口
  支持多缓存管理器实例,以及一个实例的多个缓存区域
  提供Hibernate的缓存实现

注意:ehcache 对分布式支持不够好,多个节点不能同步,通常和redis一块使用

1.2、和Redis比较:

  ehcache直接在jvm虚拟机中缓存,速度快,效率高;但是缓存共享麻烦,集群分布式应用不方便。

  redis是通过socket访问到缓存服务,效率比ecache低,比数据库要快很多,处理集群和分布式缓存方便,有成熟的方案。

  如果是单个应用或者对缓存访问要求很高的应用,用ehcache。如果是大型系统,存在缓存共享、分布式部署、缓存内容很大的,建议用redis。

  ehcache也有缓存共享方案,不过是通过RMI或者Jgroup多播方式进行广播缓存通知更新,缓存共享复杂,维护不方便;简单的共享可以,但是涉及到缓存恢复,大数据缓存,则不合适。

  ehcache3.x与2.x的差距还是非常大的,主要区别在于3.x后使用了java的缓存规范JSR107

1.3、基础配置

参看:001-spring cache 简介、基础使用

参看:002-spring cache 基于声明式注解的缓存-01-Cacheable annotation

参看上述两个配置

代码地址:https://github.com/bjlhx15/common.git spring-cache/springboot2-cache-ehcache2
代码地址:https://github.com/bjlhx15/common.git spring-cache/springboot2-cache-ehcache3

二、springboot caffeine实现步骤

  Caffeine是使用Java8对Guava缓存的重写版本,在Spring Boot 2.0中将取代Guava。如果出现Caffeine,CaffeineCacheManager将会自动配置。使用spring.cache.cache-names属性可以在启动时创建缓存,并可以通过以下配置进行自定义(按顺序):

  • spring.cache.caffeine.spec: 定义的特殊缓存
  • com.github.benmanes.caffeine.cache.CaffeineSpec: bean定义
  • com.github.benmanes.caffeine.cache.Caffeine: bean定义

代码地址:https://github.com/bjlhx15/common/tree/master/spring-cache/spring-cache-caffeine

1、pom

2、启动类注解

3、业务类注解

4、配置

spring:
cache:
cache-names: user
caffeine:
spec: initialCapacity=50,maximumSize=500,expireAfterWrite=10s,refreshAfterWrite=5s

其中spec配置参数

initialCapacity=[integer]: 初始的缓存空间大小
maximumSize=[long]: 缓存的最大条数
maximumWeight=[long]: 缓存的最大权重
expireAfterAccess=[duration]: 最后一次写入或访问后经过固定时间过期
expireAfterWrite=[duration]: 最后一次写入后经过固定时间过期
refreshAfterWrite=[duration]: 创建缓存或者最近一次更新缓存后经过固定的时间间隔,刷新缓存
weakKeys: 打开key的弱引用
weakValues:打开value的弱引用
softValues:打开value的软引用
recordStats:开发统计功能

注意:如果使用了refreshAfterWrite配置还必须指定一个CacheLoader,如:

package com.lhx.spring.cache.caffeine;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import com.github.benmanes.caffeine.cache.CacheLoader; @Configuration
public class CacheLoaderSelf {
/**
* 必须要指定这个Bean,refreshAfterWrite=5s这个配置属性才生效
*
*/
@Bean
public CacheLoader<Object, Object> cacheLoader() {
CacheLoader<Object, Object> cacheLoader = new CacheLoader<Object, Object>() {
@Override
public Object load(Object key) throws Exception {
return null;
} // 重写这个方法将oldValue值返回回去,进而刷新缓存
@Override
public Object reload(Object key, Object oldValue) throws Exception {
return oldValue;
}
}; return cacheLoader;
}
}

注意:

  • expireAfterWrite和expireAfterAccess同事存在时,以expireAfterWrite为准。
  • maximumSize和maximumWeight不可以同时使用
  • weakValues和softValues不可以同时使用
 

最新文章

  1. web前端基础知识-(二)CSS基本操作
  2. nginx配置301重定向
  3. 一个基于ANTLR 4的布尔表达式语句解释器的实现
  4. Windows 服务与 Web 服务
  5. T-SQL事务
  6. MySQL错误:You are using safe update mode and you tried to update a table without a WHERE that uses a K
  7. Android线程之异步消息处理机制(二)——Message、Handler、MessageQueue和Looper
  8. TComboBox组件重要属性和事件
  9. Linux上程序调试的基石(1)--ptrace
  10. ERROR:scala:Error:Object scala.runtime in compiler mirror not found
  11. C#Windows 服务的安装说明
  12. 《Linux内核原理与分析》第四次作业
  13. 使用ab对网站进行压力测试
  14. stm32_DMA采集一个AD数据_并通过DMA向串口发送
  15. 沉迷AC自动机无法自拔之:[UVA 11468] Substring
  16. 【C】——动态库中函数的作用范围
  17. Genymotion 解决虚拟镜像下载速度特别慢的问题[转]
  18. python3学习笔记(7)_listComprehensions-列表生成式
  19. Emmet常用语法
  20. Visual Studio 中配置openCV问题

热门文章

  1. 网站性能测试PV到TPS的转换以及TPS的波动和淘宝性能测试要点
  2. 百度地图api ak值
  3. 【java】java 设计模式(4):建造者模式(Builder)
  4. 工作流JBPM_day01:4-管理流程定义
  5. python2.0_day22_web聊天室二
  6. mysql 中实现行变列
  7. 处理unsigned相减错误(BIGINT UNSIGNED value is out of range)
  8. EventBus 简单原理(一)
  9. 佛祖保佑永无bug
  10. 进程保护--CrossThreadFlags标志位