Ehcache
- Ehcache 是一个纯 java 的进程内缓存框架。是 Hibernate 默认的缓存 provider。可以单独使用,一般在三方库中(mybatis、shiro 等)使用的较多对分布式支持不够好,多个节点不能同步,通常和 redis 一块使用。
Ehcache 和 Redis 比较
- Ehcache 直接在 Java 虚拟机中缓存,缓存共享麻烦。
- Redis 是通过 socket 访问到缓存服务。如果是单个应用或者对缓存访问要求很高的应用用 Ehcache,如果是大型系统,存在缓存共享、分布式部署、缓存内容很大的使用 Redis。
Ehcache 使用例子
SpringBoot 整合 Ehcache
多缓存配置
- 缓存配置类:用 Redisson 和 Ehache 分别配置。
Spring 缓存注解
可以标记在一个方法上,也可以标记在一个类上,当标记在方法上时表示该方法是支持缓存的,当标记在一个类上表示该类所有的方法都是支持缓存的。对于一个支持缓存的方法,Spring 会在其被调用后将其返回值缓存起来,以保证下次利用同样的参数来执行该方法时可以直接从缓存中获取结果,而不需要再次执行该方法。注解常用参数解释如下。
参数 | 意义 |
---|
value、cacheNames | 缓存的名称,在配置文件中定义,必须指定至少一个。 |
key | 缓存的 key,可以为空 |
cacheManager | 缓存的方式,项目可以配置多个缓存方式 |
无论怎样,都将方法的返回结果放到缓存当中。这个注解不会询问是否有缓存好的数据,而是每次都会执行方法,将方法的返回结果放到缓存中,相当于每次都更新缓存中的数据,每次缓存中的数据都是最新的一次缓存数据。
@CacheEvict 是用来标注在需要清除缓存元素的方法或类上的。当标记在一个类上时表示其中所有的方法的执行都会触发缓存的清除操作。
这个注解可以组合多个注解,从而实现自定义注解。
缓存其实存放的是以注解里面的 key 为 key 方法的返回值作为 key 的 value,不是注解里面的 value。