实际
2020-04-30 10:23:47
此篇文章使用版本:2.2.2.RELEASE
源码
入门
案例
1 | jdbc:mysql://192.168.1.1:3306/mydb = |
@EnableCaching
开启基于注解的缓存
1 | @Import({CachingConfigurationSelector.class}) |
@Cacheable
添加缓存
:将方法的运行结果进行缓存,以后要相同的数据,直接从缓存中获取,不用调用方法了
调用时机:先看缓存是否有,没有就调用方法并放入缓存;如果有,直接返回缓存中的数据。
注意:@Cacheable不能使用key中包含result,因为它是先判断key再调用方法【例如:key = “#result”是错误的】
1 | cacheNames/value:指定缓存组件的名字;将方法的返回结果放在哪个缓存中,是数组的方式,可以指定多个缓存; |
keyGenerator的使用
cacheManager的使用请见自定义RedisCacheManager
@CachePut
更新缓存
调用时机:直接先调用方法,然后将结果放缓存中。有对应key就进行替换,没有就进行添加。
注意:可以使用key = “#result” 把返回值作为key
@CacheEvict
1 | allEntries:清除指定缓存的所有数据 |
@Caching
定义复杂的缓存规则
@CacheConfig
抽取缓存的公共配置,加在类上,方法中就不用写了。如果类和方法同时写,方法生效。
原理分析
1 |
|
整合Redis
简单入门
1 | #指定Redis地址,Docker启动Redis 192.168.1.1,打开Redis 桌面可视化 |
说明
在SpringBoot2.x之后,原本的Jedis
被替换成了Lettuce
Jedis:采用的直连,多个线程操作的话,是不安全的,如果想要避免不安全的,使用Jedis Pool连接池。更像BIO模式。
Lettuce:采用Netty,实例可用再多个线程中进行共享,不存在线程不安全的情况~!可以减少线程数据,更像NIO模式。
自定义RedisTemplate
自定义RedisTemplate实现JSON序列化:
除了下面的实现,也可用另一种方式:存入的时候进行对象转JSON,取出再转一次。
自定义CacheManager
自定义缓存管理器
默认序列化
注意:
1)、RedisTemplate是操作Redis的模版,同Jedis一样,可以对Redis进行增删改查等操作,默认K,V都是Object,默认序列化机制是JdkSerializationRedisSerializer
2)、RedisCacheManager是管理缓存管理器的,SpringBoot默认是SimpleCacheConfiguration,此时我们引入了Redis,所以使用的是Redis的缓存管理器,默认存入的V也是使用JdkSerializationRedisSerializer
3)、在上面我们使用了自定义RedisTemplate和自定义CacheManager可以修改序列化机制,使用JSON格式来存储V。