一、缓存的作用:加快系统的访问,提升系统的性能,主要应用于高频热点数据、临时数据(验证码)
二、缓存规范:JSR107(整合难度大,应用少,更多使用的是spring缓存抽象,底层概念和JSR107是通用的)
java Caching定义了5个核心接口
1.CachingProvider:创建、配置、获取、管理、控制多个CacheManager,一个应用可以在运行期访问多个CachingProvider
2.CacheManager:创建、配置、获取、管理、控制多个唯一命名的Cache,一个CacheManager仅被一个CachingProvider拥有
3.Cache:类似Map的数据结构并临时存储以key为索引的值,一个Cache仅被一个CacheManager所拥有
4.Entry:存储在Cache中的key-value
5.Expiry:存储在Cache中一个定义的有效期,超过有效期为过期状态,不可访问、更新和删除。有效期可通过ExpiryPolicy设置
如果需导入JSR107,是要引入以下依赖:
三、Spring缓存抽象
1.Spring从3.1开始定义了org.springframework.cache.Cache和org.springframewok.cache.CacheManager接口来统一不同的缓存技术,并支持使用JCache(JSR-107)注解简化开发
2.Cache接口下Spring提供了各种xxxCache实现:如RedisCache、EhCacheCache、ConcurrentMapCache
3.除了缓存接口的实现,spring还提供相关注解来进行缓存
四、缓存注解
1.@Cacheable:对方法配置,根据方法的请求参数对结果进行缓存(查询)
2.@CacheEvict:清空缓存
3.@CachePut:保证方法调用,又希望结果被缓存(更新)
4.@EnableCaching:开启基于注解的缓存
5.keyGenerator:缓存数据时,key的生成策略
6.serialize:缓存数据时value序列化策略
五、安装mysql
1.安装好mysql,cmd进入到安装的mysql的bin目录
2.使用命令:mysql -u root -p
3.提示输入的密码,输入root对应的密码,进入到mysql
六、如何使用缓存
1.先引入mybatis和mysql依赖
2.配置,连接本地mysql
以下这个配置项连接mysql数据库的时候,会在控制台打印sql语句
3、建立好controlelr、service、mapper,
其中@MapperScan,扫描对应目录下的mapper
使用@Mapper和@Select,可直接在mapper文件,交互数据库进行查询
4.在service类中对方法进行缓存,这才完整的实现了一个简单的缓存查询业务
5.@Cacheable的属性介绍如下图
原理:
如何使用自定义的keyGenerater
1.配置keyGenerater
2.使用keyGenerater
6.使用@CachePut缓存
1.作用:既调用方法,又更新缓存
2.运行时机:先调用目标方法,再将目标方法的结果缓存起来
3.操作注意:cacheNames和查询的要一致,说明同一个Cache,key和查询缓存也要保持一致
7.使用@CacheEvict缓存
1.清除缓存,一般方法里面同样是清除数据库
2.代码操作
3.allEntries = true: 清除指定Cache里面所有key的缓存,默认是false
4.beforeInvocation = true: 缓存的清除是否在方法之前执行,默认是在方法之后执行,如果出现异常就不会清除缓存
8.@Caching
9.@CacheConfig
在类上定义缓存,这样可以不用再每个方法定义了