Spring Cache 框架 实现基于注解的缓存功能
底层
基于代理技术 一旦进入方法就进入代理对象 如果redis里有就直接返回 不会走方法
如果缓存没有数据 则通过反射走方法。
概念
缓存 相当于之前的事务处理 同步更改
只是提供了一层抽象 底层可以切换不同的缓存实现
EHCache
Caffeine
Redis
灵活 可以随时换缓存实现 只要导入相应的jar包就行 代码不用做任何修改
如果使用Spring Cache缓存数据,key的生成:userCache::key 。key:value的key就是这个,value是返回结果
1 导入maven坐标
2 常用注解
用法
@CachePut(cacheNames="userCache",key="#user,id")
如果使用Spring Cache缓存数据,key的生成:userCache::key 。key:value的key就是这个,value是返回结果
注意这里展示的是树形结构 完整的key就是(userCache::key)一整段完整的数据 但 会根据冒号展示成树形结构
比如 a:b:c:d 会展示a包下b包下c包下 有个a:b:c:d
cacheNames可以随便写,取跟功能有关的 #跟表.id 可以动态生成可以动态生成key值
#result 对象导航 代表方法的返回值 就是return后面的东西。而user是从传递的参数取到的
#p0 #a0 表示第一个参数 #p1#a01表示第二个参数
#root.args[0]跟上面一样
Cacheable
一般用于查找 这个没有result用法 看源码有没有不用死记
CacheEVict
删除数据库同时清理缓存数据,但只会清理一条
如果想清理所有 不适用key 只算出来唯一的之 要全部清理使用allEntries=true
CachePut
插入数据库同时增加到缓存数据
实现步骤
1
2
3 用户查询缓存
管理员修改时 精确清理
清理所有