一、两张图理解缓存中的成员部分:
二、几个重要概念&缓存注解
- Cache : 缓存接口,定义缓存操作。实现有:RedisCache、EhCacheCache、ConcurrentMapCache等
- CacheManager : 缓存管理器,管理各种缓存(Cache)组件
- @Cacheable : 主要针对方法配置,能够根据方法的请求参数对其结果进行缓存
- @CacheEvict :清空缓存
- @CachePut: 保证方法被调用,又希望结果被缓存。 这个可以更新缓存。
- @EnableCaching :开启基于注解的缓存
- keyGenerator : 缓存数据时key生成策略
- serialize :缓存数据时value序列化策略
三、如何在springboot中使用缓存
springboot给我们提供了缓存抽象。
- 1.创建项目的时候,引入spring-boot-starter-cache模块
- 2、@EnableCaching开启缓存
- 3、使用缓存注解
@Cacheable 表示这个方法可以进行缓存
@CachePut :这个是先进行操作,同时又更新缓存。
@CacheEvict :缓存清除。比方说,我们要进行数据的删除了,显然缓存中的数据我们是也要清除掉的。
@CacheEvict 有一个属性,默认值是false,当我们置为true的时候,就会将缓存中的东西全部清空。
@CacheEvict 有一个属性,默认值是false,代表我们在方法执行之后删除缓存,当我们置为true的时候,不管方法是否能顺利执行,都要把缓存删除掉。
@Caching 这是一个组合注解,这用于复杂的情况,需要我们组合来使用注解的时候。
@CacheConfig 可以配置公共的部门,比方说都有一个缓存名
- 4、切换为其他缓存(这一块不够详细,等有时间回头再重新丰富一下)
在开发中我们多数会选择使用其它的缓存,入redis。如果对redis不太熟悉的话,可以到我贴的中文网上去快速的学习。
http://www.redis.cn/
做了入门以后,就可以开始使用了。
下边贴一篇我转载的文章,关于redis的使用:
https://blog.csdn.net/star1210644725/article/details/90509967
四、缓存的原理
可以进行缓存和我们的自动配置类有关,在默认情况下,使用红框里边的缓存,底层数据结构是一个线程安全的Map,也就是说缓存就是在做用空间换时间的事。
缓存的运行流程:
- Cachemanager(缓存管理者, 在没有指定的情况下,默认使用ConcurrentMapCacheManager) 先去查询指定名字的缓存,在第一次调用肯定没有,这就要创建这个名字的缓存。
- 在cache组件中去查找指定键值Key的值。
- 如果是第一次进行查询,缓存里边肯定是没有数据的,那就要调用目标方法
- 将目标方法返回的结果放在缓存中,供下一次缓存使用。