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

版权声明:随意转载。 https://blog.csdn.net/dengjili/article/details/85078983

@Cacheable 作用和配置方法

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

猜你喜欢

转载自blog.csdn.net/dengjili/article/details/85078983