spring缓存机制与redis(redis学习十三)

@Cacheable 作用和配置方法
属性配置类型描述
valueString[]缓存的名称,缓存中具体哪个数据库,在 spring 配置文件中定义,必须指定至少一个
keyString缓存的 key,可以为空,如果指定要按照 SpEL 表达式编写,如果不指定,则缺省按照方法的所有参数进行组合,或者方法参数列表中的任意一个参数,或者字符串+参数组合
conditionString缓存的条件,可以为空,使用 SpEL 编写,返回 true 或者 false,只有为 true 才进行缓存,condition对传入值生效
unlessString缓存的条件,可以为空,使用 SpEL 编写,返回 true 或者 false,只有为 false才进行缓存,unless对结果result生效

例子代码

	/**
	 * 1.注解的condition和unless的区别,condition对传入值生效,unless对结果result生效,使用了错误的result导致报空错误 
	 * 2.key键生成策略,不能再key中直接调用工具类的方法,将方法写在同一个类下,使用#root.target.methodName(#p0.attributeName)对属性值进行操作,最佳解决方案:使用自定义key策略,将参数转为带操作的对象,返回key 
	 * 3.属性与NULL比较时,null 写在前面 ,null eq object
	 */
	@Cacheable(value = "redisCacheManager", key = "'redis_role_'+#id", unless="null eq #result")
	public Role getRole(Long id) {
		return roleDao.getRole(id);
	}

@CachePut 作用和配置方法

与Cacheable 相同,只是流程上面不同。

  1. CachePut 先执行函数体,然后将内容缓存到redis上面,适用于update、insert
  2. Cacheable 先查询缓存,不存在再执行函数体,然后将返回内容缓存到redis中
    例子代码
	// 这里为了测试返回值写法,所有写的别扭
	@CachePut(value = "redisCacheManager", key = "'redis_role_'+#result.id")
	public Role insertRole(Role role) {
		roleDao.insertRole(role);
		return role;
	}

	@CachePut(value = "redisCacheManager", key = "'redis_role_'+#role.id")
	public int updateRole(Role role) {
		return roleDao.updateRole(role);
	}
@CacheEvict 作用和配置方法

在这里插入图片描述
例子代码

@CacheEvict(value = "redisCacheManager", key = "'redis_role_'+#id")
	public int deleteRole(Long id) {
		return roleDao.deleteRole(id);
	}
实际项目使用工程

https://github.com/dengjili/redis-example

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值