redis进阶之缓存管理(1课时)

配置

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,如果你在你的方法写别的名字,那么依然以方法的名字为准。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容