新闻

新闻动态

良好的口碑是企业发展的动力

springboot缓存

发布时间:2024-01-13 08:13:11 点击量:115
网站营销

 

Spring Boot 提供了多种缓存解决方案,方便开发者在应用中集成缓存功能并提升应用性能。下面将对 Spring Boot 缓存进行详细介绍。

 

一、什么是缓存

缓存是一种在计算机系统中用于临时存储数据的技术。它可以将经常使用的数据存储在高速访问的位置,以减少对慢速磁盘或远程服务器的访问次数,从而提高系统性能和响应速度。缓存一般分为内存缓存和磁盘缓存两种。

 

二、Spring Boot 缓存解决方案

Spring Boot 支持多种缓存解决方案,包括内嵌缓存、Redis 缓存、Ehcache 缓存等。

 

1. 内嵌缓存

Spring Boot 默认使用的是 ConcurrentMapCacheManager,它将缓存存储在内存中,适用于小型应用或开发环境。可以通过在 `pom.xml` 文件中添加依赖来开启内嵌缓存:

 

```xml

org.springframework.boot

spring-boot-starter-cache

```

 

在需要使用缓存的方法上添加 `@Cacheable` 注解,指定缓存的名称和缓存的key,如:

```java

@Cacheable(value = "users"

key = "#id")

public User getUserById(Integer id) {

// ...

}

```

 

2. Redis 缓存

Redis 是一种高性能的内存数据库,Spring Boot 提供了 Redis 缓存的支持。可以通过在 `pom.xml` 文件中添加依赖来引入 Redis 缓存支持:

 

```xml

org.springframework.boot

spring-boot-starter-data-redis

```

 

在 `application.properties` 或 `application.yml` 文件中配置 Redis 连接信息,如:

```properties

spring.redis.host=localhost

spring.redis.port=6379

```

 

然后在需要使用缓存的方法上添加 `@Cacheable` 注解,指定缓存的名称和缓存的key,如:

```java

@Cacheable(value = "users"

key = "#id")

public User getUserById(Integer id) {

// ...

}

```

 

3. Ehcache 缓存

Ehcache 是一种基于 Java 的开源缓存框架,它提供了对内存和磁盘缓存的支持。可以通过在 `pom.xml` 文件中添加依赖来引入 Ehcache 缓存支持:

 

```xml

org.springframework.boot

spring-boot-starter-cache

net.sf.ehcache

ehcache

```

 

在 `application.properties` 或 `application.yml` 文件中配置 Ehcache 缓存,如:

```properties

spring.cache.type=ehcache

```

 

然后在需要使用缓存的方法上添加 `@Cacheable` 注解,指定缓存的名称和缓存的key,如:

```java

@Cacheable(value = "users"

key = "#id")

public User getUserById(Integer id) {

// ...

}

```

 

三、缓存注解详解

1. @Cacheable:将方法的返回值缓存起来,下次调用时直接返回缓存的结果。

2. @CachePut:将方法的返回值缓存起来,下次调用时会执行方法并将返回值更新到缓存中。

3. @CacheEvict:从缓存中移除指定的缓存项。

4. @Caching:将多个缓存注解组合在一起使用。

5. @CacheConfig:配置缓存的一些通用属性。

 

缓存的key可以使用 SpEL 表达式来指定。SpEL 是 Spring 表达式语言,它提供了一种强大的表达式求值能力,可以在运行时用于访问和操作对象的属性。

 

```java

@Cacheable(

value = "users"

 

key = "#id"

 

condition = "#id > 0"

 

unless = "#result == null"

)

public User getUserById(Integer id) {

// ...

}

```

 

上面的例子中,`value` 指定了缓存的名称,`key` 使用了 SpEL 表达式指定了缓存的key,`condition` 表示只有当 id 大于0时才执行缓存逻辑,`unless` 表示只有当返回结果不为null时才执行缓存逻辑。

 

四、缓存管理器

Spring Boot 默认使用了 ConcurrentMapCacheManager,对于一些小型应用或开发环境来说已经足够了。但在生产环境中,我们一般会选择其他的缓存管理器。

 

可以通过配置文件来指定使用的缓存管理器,如:

```properties

spring.cache.type=redis

```

这样就使用了 Redis 缓存管理器。

 

使用其他的缓存管理器,需要先引入相应的依赖,并进行相应的配置。例如:使用Ehcache缓存管理器。

 

1) 添加 Ehcache 依赖:

```xml

org.springframework.boot

spring-boot-starter-cache

net.sf.ehcache

ehcache

```

 

2) 在 `application.properties` 或 `application.yml` 配置文件中增加 Ehcache 相关配置:

```properties

spring.cache.type=ehcache

```

 

3) 创建 Ehcache 缓存配置文件 `ehcache.xml`:

```xml

xsi:noNamespaceSchemaLocation="http://www.ehcache.org/ehcache.xsd"

updateCheck="false">

timeToIdleSeconds="600" timeToLiveSeconds="1800">

```

 

以上就是使用 Ehcache 缓存管理器的基本配置步骤。

 

五、缓存的清理与失效

一个缓存项可以通过 `@CacheEvict` 注解来清理,可以指定清理某个缓存项或清理某个缓存名称下的所有缓存项。

```java

@CacheEvict(value = "users"

key = "#id")

public void deleteUserById(Integer id) {

// ...

}

```

 

缓存项也可以失效,即根据一定的规则过期。可以通过在 `@Cacheable` 注解中添加 `expire` 属性来指定缓存项的过期时间。如:

```java

@Cacheable(value = "users"

key = "#id"

expire = 60)

public User getUserById(Integer id) {

// ...

}

```

上面的例子中,缓存项的过期时间为60秒。

 

Spring Boot 缓存也支持根据缓存的key进行失效。可以使用 `@CacheEvict` 注解的 `allEntries` 属性来指定是清空所有缓存项还是清空指定 key 的缓存项,默认为 `false`,即只清空指定 key 的缓存项。

```java

@CacheEvict(value = "users"

allEntries = true)

public void deleteAllUsers() {

// ...

}

```

 

六、总结

Spring Boot 提供了多种缓存解决方案,包括内嵌缓存、Redis 缓存、Ehcache 缓存等。可以根据应用的实际需求选择相应的缓存解决方案,并使用缓存注解来实现缓存功能。通过使用缓存可以提高应用的性能和响应速度。

免责声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,也不承认相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,请发送邮件至:dm@cn86.cn进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。本站原创内容未经允许不得转载。
上一篇: js转换大小写