Spring Boot 中的 ConcurrentMapCacheManager

简介: Spring Boot 中的 ConcurrentMapCacheManager

Spring Boot 中的 ConcurrentMapCacheManager


在 Spring Boot 中,缓存是一个非常重要的话题。当我们需要频繁读取一些数据时,为了提高性能,可以将这些数据缓存起来,避免每次都从数据库中读取。为了实现缓存,Spring Boot 提供了一些缓存管理器的实现,其中最常用的是 ConcurrentMapCacheManager。


image.png


ConcurrentMapCacheManager 是什么?


ConcurrentMapCacheManager 是 Spring Boot 提供的一个简单的缓存管理器,它基于 Java 并发包中的 ConcurrentHashMap 实现。ConcurrentMapCacheManager 可以创建多个缓存,每个缓存都有一个唯一的名称和一个 ConcurrentHashMap 实例,用于存储缓存数据。


ConcurrentMapCacheManager 的原理


在 Spring Boot 中,缓存管理器是用来管理缓存的。缓存管理器负责缓存的创建、读取、更新和删除等操作。ConcurrentMapCacheManager 是一个简单的缓存管理器,它使用 ConcurrentHashMap 来实现缓存的创建和管理。


ConcurrentHashMap 是一个线程安全的哈希表,它可以支持多个线程同时读写,而不需要任何同步措施。ConcurrentMapCacheManager 使用 ConcurrentHashMap 来存储缓存数据,每个缓存都有一个唯一的名称和一个 ConcurrentHashMap 实例。当需要读取或写入缓存时,ConcurrentMapCacheManager 会根据缓存名称获取相应的 ConcurrentHashMap 实例,然后进行相应的操作。


ConcurrentMapCacheManager 的使用


使用 ConcurrentMapCacheManager 非常简单,只需要在配置文件中添加以下配置:


spring:
  cache:
    type: concurrent

在上面的配置中,设置了缓存类型为 concurrent,表示使用 ConcurrentMapCacheManager 作为缓存管理器。可以根据实际情况进行配置。


在使用 ConcurrentMapCacheManager 时,需要在代码中使用 @Cacheable、@CachePut、@CacheEvict 等注解来实现缓存的读取、写入和删除等操作。例如:

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;
    @Cacheable(value = "users", key = "#id")
    public User getUserById(Long id) {
        return userRepository.findById(id).orElse(null);
    }
    @CachePut(value = "users", key = "#user.id")
    public User saveUser(User user) {
        return userRepository.save(user);
    }
    @CacheEvict(value = "users", key = "#id")
    public void deleteUserById(Long id) {
        userRepository.deleteById(id);
    }
}

在上面的代码中,使用了 @Cacheable、@CachePut、@CacheEvict 等注解来实现缓存的读取、写入和删除等操作。其中,@Cacheable 注解用来读取缓存,@CachePut 注解用来写入缓存,@CacheEvict 注解用来删除缓存。需要注意的是,@CachePut 和 @CacheEvict 注解必须指定缓存的键。


ConcurrentMapCacheManager 的高级使用


在使用 ConcurrentMapCacheManager 时,还可以设置一些高级属性。下面介绍几个常用的高级属性:


initialCapacity


initialCapacity 属性可以用来设置初始容量。默认值为 256。


maximumSize


maximumSize 属性可以用来设置最大容量。当缓存中的数据超过最大容量时,会根据 LRU(最近最少使用)算法删除最近最少使用的数据。默认值为 1024。


expireAfterAccess


expireAfterAccess 属性可以用来设置缓存的失效时间。当缓存中的数据超过失效时间时,会自动删除缓存数据。默认值为 null,表示缓存不会失效。


expireAfterWrite


expireAfterWrite 属性同样可以用来设置缓存的失效时间,但是与 expireAfterAccess 不同的是,它是从数据写入缓存开始计算的时间。当缓存中的数据超过失效时间时,会自动删除缓存数据。默认值为 null,表示缓存不会失效。


cacheNames


cacheNames 属性可以用来设置缓存名称的列表。当使用 @Cacheable、@CachePut、@CacheEvict 等注解时,可以指定缓存的名称。如果不指定缓存名称,则默认使用第一个缓存。例如:


spring:
  cache:
    type: concurrent
    cache-names: [users, books]

在上面的配置中,设置了两个缓存,一个是 users 缓存,一个是 books 缓存。


总结


ConcurrentMapCacheManager 是 Spring Boot 提供的一个简单的缓存管理器,它基于 Java 并发包中的 ConcurrentHashMap 实现。使用 ConcurrentMapCacheManager 可以快速实现缓存功能,提高应用程序的性能。在使用 ConcurrentMapCacheManager 时,需要注意一些高级属性的设置,以满足不同的需求。


相关文章
|
4月前
|
监控 Java 应用服务中间件
什么是 Spring Boot,及为什么要用 Spring Boot
**Spring Boot**: 2013年起研,简化Spring笨重配置,集成常用库,开箱即用,少代码配置,专注业务。 **为何选Spring Boot?** 出色基因,快速搭建;单一依赖替多;Java Config简化配置;内嵌Tomcat,简化部署;监控REST化;微服务友好,趋势之选。
161 27
|
6月前
|
Java Spring
精通 Spring Boot 系列 08
精通 Spring Boot 系列 08
42 0
|
6月前
|
Java 数据库连接 数据库
精通 Spring Boot 系列 13
精通 Spring Boot 系列 13
41 0
|
6月前
|
Java Spring 容器
精通 Spring Boot 系列 02
精通 Spring Boot 系列 02
23 0
|
6月前
|
存储 安全 Java
精通 Spring Boot 系列 14
精通 Spring Boot 系列 14
30 0
|
6月前
|
Java 数据库 Spring
精通 Spring Boot 系列 12
精通 Spring Boot 系列 12
42 0
|
6月前
|
存储 安全 Java
精通 Spring Boot 系列 15
精通 Spring Boot 系列 15
43 0
|
存储 JSON 安全
Spring Boot 安全
1.概述 在后端来说,安全主要就是控制用户访问,让对应权限的用户能访问到对应的资源,主要是两点: 认证 授权 认证,确定是谁。 授权,核实权限。 每个安全框架其实都是为了实现这两点。 目前常用的实现方式有如下几种: token JWT oauth spring security 前三种是理念,最后一种是开箱即食的框架。 2.token 2.1.理论 token ,也叫“令牌”,是验证用户身份的凭证。token的组成具有随意性,能标识用户身份即可。
127 0
|
开发框架 Java 开发者
spring boot介绍
spring boot介绍
|
XML 监控 Java
初学Spring Boot 必须要知道的事
Spring Boot简介 Spring Boot 核心功能 Spring Boot的优缺点 SpringBoot 常用注解和原理
171 0