配置
spel表达式:https://blog.csdn.net/wujiaqi0921/article/details/79123873
参考spring手册36小节,领着看一下Spring手册
<!-- 启用缓存注解功能,这个是必须的,否则注解不会生效,另外,该注解一定要声明在spring主配置文件中才会生效
-->
<cache:annotation-driven cache-manager="cacheManager" />
<!--初始化缓存管理器
-->
<bean id="cacheManager" class="org.springframework.data.redis.cache.RedisCacheManager">
<constructor-arg
ref="redisTemplate" />
</bean>
注意:在使用缓存的时候,一定要定义缓存管理器为id="cacheManager"
定义其他名字,服务器已启动就报找不到cacheManager,应该是spring缓存内置需要这个bean
代码样例
@CacheConfig(cacheNames={IUserManager.cacheName})
public class UserManager implements IUserManager {
@Autowired
private IUserMapper userMapper;
@Override
@CacheEvict(allEntries=true)
public void updateUser(User
user) {
System.out.println("update"+ user.getId);
userMapper.updateUser(user);
}
@Override
@Cacheable(key="#root.methodName+#root.args[0]+#root.args[1]")
public List<User> getAll(int pageNum,int pageSize)
{
PageHelper.startPage(pageNum, pageSize);
List<User> userList=userMapper.getAll();
return userList;
}
}
相关注解
1、@Cacheable
@Cacheable 可以标记在一个方法上,也可以标记在一个类上。当标记在一个方法上时表示该方法是支持缓存的,当标记在一个类上时则表示该类所有的方法都是支持缓存的。
@Cacheable(value=”accountCache”),这个注释的意思是,当调用这个方法的时候,会从一个名叫 accountCache 的缓存中查询,如果没有,则执行实际的方法(即查询数据库),并将执行的结果存入缓存中,否则返回缓存中的对象。这里的缓存中的key 就是参数 userName,value 就是Account 对象。“accountCache”缓存是在 spring*.xml
中定义的名称。
2、@CachePut
@CachePut 的作用
主要针对方法配置,能够根据方法的请求参数对其结果进行缓存,和 @Cacheable
不同的是,它每次都会触发真实方法的调用
@CachePut 注释,这个注释可以确保方法被执行,同时方法的返回值也被记录到缓存中,实现缓存与数据库的同步更新。
3、@CacheEvict
@CachEvict 的作用
主要针对方法配置,能够根据一定的条件对缓存进行清空
@CacheConfig
所有的@Cacheable()里面都有一个value=“xxx”的属性,这显然如果方法多了,写起来也是挺累的,如果可以一次性声明完那就省事了,
所以,有了
@CacheConfig这个配置,@CacheConfig is a class-level annotation that
allows to share the cache names,如果你在你的方法写别的名字,那么依然以方法的名字为准。