spring的三种缓存的map是什么结构的
时间: 2023-06-18 18:08:00 浏览: 58
Spring框架提供了三种缓存实现,分别是ConcurrentMapCache、EhCacheCache和RedisCache。
ConcurrentMapCache是基于ConcurrentHashMap实现的,它是一个线程安全的HashMap,使用分段锁的方式提高并发性能。
EhCacheCache是基于Ehcache实现的,它是一个广泛使用的开源缓存框架,支持多级缓存、内存和磁盘缓存等功能。
RedisCache是基于Redis实现的,它是一个高性能的内存数据库,支持多种数据结构,包括字符串、哈希、列表、集合、有序集合等。
三种缓存实现都是基于Map结构实现的,其中ConcurrentMapCache和EhCacheCache是基于本地内存实现的,RedisCache是基于远程服务器实现的。
相关问题
spring的三级缓存的map是什么结构的
Spring的三级缓存中,第二级缓存是通过一个ConcurrentMap来实现的,而第三级缓存是通过一个ConcurrentHashMap来实现的。这两个Map都是线程安全的。
其中,第二级缓存的ConcurrentMap是在每个缓存的BeanFactory中维护的,用于缓存已经解析好的BeanDefinition对象。而第三级缓存的ConcurrentHashMap是在整个Spring容器中共享的,用于缓存已经实例化好的Bean对象。
值得注意的是,第三级缓存的ConcurrentHashMap并不是在Spring的BeanFactory中维护的,而是在AbstractApplicationContext中维护的。这意味着,如果一个BeanFactory被多个ApplicationContext共享,那么它们将共享同一个第三级缓存。
spring 三级缓存 详细过程
Spring的三级缓存指的是BeanFactory的三级缓存。它的详细过程如下:
1. Spring在初始化BeanFactory时,会先创建一个名为singletonObjects的ConcurrentHashMap对象,用于存储已经创建的单例Bean对象。
2. 在BeanFactory中,Spring会维护一个名为earlySingletonObjects的ConcurrentHashMap对象,用于存储创建中的Bean对象。这个Map中存储的是已经经过实例化但还未完成属性填充和初始化的Bean对象。
3. 在BeanFactory中,Spring还维护了一个名为singletonFactories的ConcurrentHashMap对象,用于存储Bean的创建工厂对象。这个Map中存储的是Bean创建过程中所使用的创建工厂对象,即BeanDefinition对象,而不是真正的Bean实例。
当一个Bean被请求时,Spring会按照如下顺序尝试从缓存中获取Bean:
1. 首先,Spring会尝试从singletonObjects中获取Bean对象。如果能够获取到Bean对象,则直接返回。
2. 如果singletonObjects中不存在Bean对象,则Spring会尝试从earlySingletonObjects中获取Bean对象。
- 如果能够获取到Bean对象,则将其移动到singletonObjects中,并返回该对象。
- 如果earlySingletonObjects中也不存在Bean对象,则进入下一步。
3. 最后,Spring会尝试从singletonFactories中获取Bean创建工厂对象。如果存在Bean创建工厂对象,则Spring会使用该对象完成Bean的创建,并将创建的Bean对象存储到singletonObjects和earlySingletonObjects中。
- 如果singletonFactories中也不存在Bean创建工厂对象,则进入下一步。
4. 如果以上三个缓存中都无法获取到Bean对象,则Spring会按照正常的Bean创建流程来创建该Bean对象。
在Bean实例化和初始化完成后,该Bean对象会被存储到singletonObjects中,并从earlySingletonObjects中移除。这样,下次请求该Bean时,就可以直接从singletonObjects中获取到Bean对象了。