其他分享
首页 > 其他分享> > 学习Spring Boot:(二十一)使用 EhCache 实现数据缓存

学习Spring Boot:(二十一)使用 EhCache 实现数据缓存

作者:互联网

前言

当多次查询数据库影响到系统性能的时候,可以考虑使用缓存,来解决数据访问新能的问题。
SpringBoot 已经为我们提供了自动配置多个 CacheManager 的实现,只要去实现使用它就可以了。

一般的系统都是优先使用 EhCache,它工作在 JAVA 进程中,在传统的应用没有太大要求的时候,使用它比较方便,分布式系统中去使用 Shiro 集中管理缓存。

正文

加入依赖

在 pom.xml 中加入依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>
        <dependency>
            <groupId>net.sf.ehcache</groupId>
            <artifactId>ehcache</artifactId>
        </dependency>

添加缓存相关的配置

新建 ehcache.xml,加入缓存相关参数, 我新添加一个 name 为 users 的缓存设置:

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
         updateCheck="false">
    <diskStore path="java.io.tmpdir/Tmp_EhCache"/>
    <defaultCache
            maxElementsInMemory="1000"
            maxEntriesLocalHeap="400"
            eternal="false"
            timeToIdleSeconds="120"
            timeToLiveSeconds="120"
            overflowToDisk="false"
            diskPersistent="false"
            diskExpiryThreadIntervalSeconds="120"/>

    <cache
            name="users"
            maxEntriesLocalHeap="200"
            timeToLiveSeconds="600"
    />

</ehcache>

参数详解:

开启缓存

  1. 在系统配置文件中指定
    在配置文件中加入指定我们设置的 ehcache.xml 作为 EhCache 的配置文件:
spring:
  cache:
    ehcache:
      config: config/ehcache.xml # 指定 ehcache.xml 创建EhCache的缓存管理器
    type: ehcache # 指定缓存管理器
  1. 在启动类上加上注解 @EnableCaching,开启缓存。

使用

使用的时候需要注意,我们之前在 shiro 缓存中 配置了相关的缓存的配置,现在需要把 shiro 相关的缓存的内容全部都要删除掉,不然两者的缓存会存在冲突。
还是以 shiro 的获取权限列表的服务为例,不用 shiro-cache 后,直接在查询的这里自己添加上缓存就可以了。

@CacheConfig(cacheNames = "users")
public interface ShiroService {
    /**
     * 获取用户权限
     *
     * @param userId 用户ID
     * @return 权限
     */
    @Cacheable
    Set<String> getUserPermissions(long userId);

debug 调试,

@Autowired
private CacheManager cacheManager;

发现 key 为 users 中存储了相关内容。

注解的使用

除了这里用到的两个注解之外,还有下面几个核心注解:
* @CachePut:配置于函数上,能够根据参数定义条件来进行缓存,它与@Cacheable不同的是,它每次都会真是调用函数,所以主要用于数据新增和修改操作上。它的参数与@Cacheable类似,具体功能可参考上面对@Cacheable参数的解析
* @CacheEvict:配置于函数上,通常用在删除方法上,用来从缓存中移除相应数据。除了同@Cacheable一样的参数之外,它还有下面两个参数:

  1. allEntries:非必需,默认为false。当为true时,会移除所有数据
  2. beforeInvocation:非必需,默认为false,会在调用方法之后移除数据。当为true时,会在调用方法之前移除数据。

缓存配置

在Spring Boot中通过@EnableCaching注解自动化配置合适的缓存管理器(CacheManager),Spring Boot根据下面的顺序去侦测缓存提供者:

  1. Generic
  2. JCache (JSR-107)
  3. EhCache 2.x
  4. Hazelcast
  5. Infinispan
  6. Redis
  7. Guava
  8. Simple

通常还是推荐去指定一个 缓存类型比较好,在系统配置文件配置:

spring:
  cache:
    type: ehcache

参考文章

标签:EhCache,ehcache,缓存,Spring,Boot,Cacheable,参数,key,使用
来源: https://blog.csdn.net/qq_43842093/article/details/121410156