📜  Spring Boot – 缓存(1)

📅  最后修改于: 2023-12-03 15:05:15.871000             🧑  作者: Mango

Spring Boot 缓存

在 Web 应用程序中,缓存是一种提高性能的常用技术。 Spring Boot 通过集成不同的缓存库来提供缓存支持。本文将介绍 Spring Boot 中缓存的基本概念、配置和实现。

缓存基础知识
缓存是什么?

缓存是一种提供快速访问数据的技术,可以存储一组已经获取的数据,并在后续需要使用时直接从缓存中获取。

为什么使用缓存?

使用缓存可以显著提高应用程序的性能,因为它可以避免重复计算或者从数据库、网络等来源读取数据的时间。此外,缓存还可以减轻后端服务器负担,提高应用程序的响应速度。

缓存的类型

常见的缓存类型包括:

  • 内存缓存:将数据缓存在内存中,读取速度非常快,但容易受到 JVM 堆大小的限制。
  • 磁盘缓存:将数据缓存在硬盘上,缓存容量较大,但读取速度相对内存缓存较慢。
  • 分布式缓存:多个节点之间共享缓存数据,可以增加缓存容量和可用性,但需要考虑分布式一致性和网络通信等问题。
Spring Boot 缓存

Spring Boot 提供了统一的缓存接口,可以集成多个缓存库,包括 EhCache、Redis、Guava 等。这些缓存库有不同的特点和使用场景,开发者可以根据实际情况选择合适的缓存库。

缓存配置

开启缓存

在 Spring Boot 中开启缓存非常简单,只需要在 Spring Boot 应用程序主类中使用 @EnableCaching 注解即可开启缓存支持。

@SpringBootApplication
@EnableCaching
public class MyApp {
    public static void main(String[] args) {
        SpringApplication.run(MyApp.class, args);
    }
}

配置缓存库

Spring Boot 支持集成多个缓存库,可以通过在 application.propertiesapplication.yml 中配置相关属性来选择缓存库。

以 EhCache 缓存库为例,需要添加以下配置:

spring.cache.type=ehcache

在使用 Redis 作为缓存库时,需要添加以下配置:

spring.cache.type=redis
spring.redis.host=127.0.0.1
spring.redis.port=6379

更多缓存库的配置细节,可以参见官方文档。

缓存使用

Spring Boot 提供了一组注解来实现缓存操作,包括:

  • @Cacheable:指定方法的返回值需要缓存,如果缓存中有相应的数据,则直接返回缓存中的数据,否则调用方法,并将方法返回值缓存起来。
  • @CachePut:指定方法的返回值需要缓存,并且每次调用方法都会将返回值缓存起来,适用于更新缓存数据。
  • @CacheEvict:指定方法需要清除缓存中的数据。

@Cacheable

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    @Cacheable(value = "users", key = "#id")
    public User getUserById(Long id) {
        return userRepository.findById(id).orElse(null);
    }
}

以上代码将使用 users 缓存,缓存的 key 是 id 参数。如果缓存中已经存在这个 key,则直接返回缓存中的数据,否则从数据库中读取数据并添加到缓存中。

@CachePut

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    @CachePut(value = "users", key = "#user.id")
    public User updateUser(User user) {
        // 更新用户信息
        userRepository.save(user);
        return user;
    }
}

以上代码使用 users 缓存,缓存的 key 是用户的 ID。每次更新用户信息时,都会将更新后的用户数据添加到缓存中。

@CacheEvict

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    @CacheEvict(value = "users", key = "#id")
    public void deleteUserById(Long id) {
        // 删除用户信息
        userRepository.deleteById(id);
    }
}

以上代码使用 users 缓存,缓存的 key 是用户的 ID。删除用户信息时,同时从缓存中删除相应的数据。

缓存管理

Spring Boot 提供了一组缓存管理器来管理缓存,包括:

  • ConcurrentMapCacheManager:使用内存作为缓存存储。
  • EhCacheCacheManager:使用 EhCache 作为缓存存储。
  • RedisCacheManager:使用 Redis 作为缓存存储。

缓存管理器可以自己实现,只需要实现 org.springframework.cache.CacheManager 接口即可。

总结

本文介绍了 Spring Boot 中缓存的概念、配置和使用,包括开启缓存、选择缓存库、使用注解实现缓存操作和使用缓存管理器等内容。在实际开发中,合理使用缓存可以显著提高应用程序的性能,开发者需要根据具体情况选择合适的缓存库和缓存策略。