Spring Cache
基本介绍
Spring Cache是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。
Spring Cache提供了一层抽象,底层可以切换不同的cache实现。具体就是通过CacheManager接口来统一不同的缓存技术。
CacheManager是Spring提供的各种缓存技术抽象接口。
针对不同的缓存技术,需要实现不同的CacheManager:
注解
入门
导入pom依赖
如果是使用基础的,我们只需要导入这个pom依赖即可。如果使用redis缓存,还需要加其他依赖。
在启动类上,加上注解@EnableCaching
@CachePut添加缓存
CachePut将方法返回值放入缓存,这个注解一般写在add方法上。
其中参数value表示缓存的名称,每个缓存下面可以有多个key;key缓存的key
@CachePut(value="userCache",key="#result.id"
result表示的是返回值对象;而写user表示的是参数,与参数同名!
这种写法默认使用的是ConcurrentMapCacheManager,缓存是基于内存的,当服务器停掉,重新启动,里边就没有数据了。
@CacheEvict清除缓存
这个注解一般写在delete;update方法上去清除缓存
@CacheEvict清除指定缓存
value缓存的名称,每个缓存名称下面可以有多个key
key缓存的key
@Cacheable先判断在存储
这个注解写在get方法上。
@Cacheable先看缓存有没有数据,如果有数据,则直接返回缓存数据;如果没有,则调用方法并将返回值放在缓存中。
上边这么写,无论查出来有没有数据,都会存入缓存,value的值可能为null
下边这个会判断一下,返回值是不是为空,不为空才进行保存
上边那个有错误:是因为condition不能使用result
上边的缓存的底层都是基于map的,现在我们改变一下底层,让他基于redis
redis实现
导入这个依赖,实现类多一点,但是还是没有redis
再导入这个依赖,就有了
需要注意的是,添加缓存的时候,返回的那个结果,一定要实现序列化接口,要不会报错!!!
添加缓存-------查询方法上
@Cacheable(value="setmealCache",key = "#setmeal.categoryId")
删除缓存全部数据------------修改删除和新增方法上
@CacheEvict(value = "setmealCache",allEntries = true)
@Cacheable(value="setmealCache",key = "#setmeal.categoryId+'_'+#setmeal.status")