springboot 内置缓存技术

前言

前面说到JSR-107缓存规则,不过很少有人用,那么大家都可能用什么呢?其实雷士的缓存技术还是很多的,不过重点就说一个springboot的缓存技术,他们的概念都是一样的,但是springboot已经给大家写好了过程,我们就不需要在自己去具体实现了

几个重要的注解和概念

名称解释
Cache缓存接口,定义缓存操作。实现有:RedisCache、EhCacheCache、ConcurrentMapCache等
CacheManager缓存管理器,管理各种缓存(Cache)组件
@Cacheable主要针对方法配置,能够根据方法的请求参数对其结果进行缓存
@CacheEvict清空缓存
@CachePut保证方法被调用,又希望结果被缓存(缓存更新)
@EnableCaching开启基于注解的缓存
keyGenerator缓存数据时key生成策略
serialize序列化

核心

准备:

一、首先需要添加依赖:

  • 1.直接在springboot 快速构建时选择cache模块(直接搜索就行)
  • 2.直接在pom文件中添加依赖:
    spring-boot-starter-cache

二、在启动类上添加;@enableCaching 注解开启缓存

使用

@Cacheable注解的属性:

属性解释
cacheNames/value指定缓存的名字,缓存使用CacheManager管理多个缓存组件Cache,这些Cache组件就是根据这个名字进行区分的。对缓存的真正CRUD操作在Cache中定义,每个缓存组件Cache都有自己唯一的名字,通过cacheNames或者value属性指定,相当于是将缓存的键值对进行分组,缓存的名字是一个数组,也就是说可以将一个缓存键值对分到多个组里面
key缓存数据时的key的值,默认是使用方法参数的值,可以使用SpEL表达式计算key的值
keyGenerate缓存的生成策略,和key二选一,都是生成键的,keyGenerator可自定义
cacheManager指定缓存管理器(如ConcurrentHashMap、Redis等)
cacheResolver和cacheManager功能一样,和cacheManager二选一
condition指定缓存的条件(满足什么条件时才缓存),可用SpEL表达式(如#id>0,表示当入参id大于0时才缓存)
unless否定缓存,即满足unless指定的条件时,方法的结果不进行缓存,使用unless时可以在调用的方法获取到结果之后再进行判断(如#result==null,表示如果结果为null时不缓存)
sync是否使用异步模式进行缓存

@CachePut
@Cache
@Caching

额外知识

这里有使用到mybatis技术就顺手写一下,mybatis也拥有自己的缓存技术,它也是拥有注解版的,特别提一下,
它的缓存技术分为两级
第一级:局部缓存(sqlsession级别)

  • 局部缓存是默认开启的
    • 疑问:既然他是默认开启的,为什么在此次整合中没有看到没有mybatis的效果
    • 解答:mybatis的第一级缓存,需要在开启事务的情况下才能开到缓存效果, 而在springboot中是默认不开启事务的

第二级:全局缓存(mapper级别)

  • 全局缓存需要手动开启
    • 方法一:在类上添加@CacheNamespace注解
    • 方法二:在mapper.xml文件中添加< /cache>

版权声明:本文为weixin_43157543原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。