Redis注解

 

 

 

 

 

@Service
//@CacheConfig(cacheNames = "emp")//指定公共的cache组件
public class EmployeeService {
    @Autowired
    private EmployeeDao employeeDao;

    /*
     * @Cacheable:
     * 把方法的运行结果进行缓存;以后再要相同的数据,直接从缓存中取,不用调用方法
     * CacheManager 管理多个Cache组建的,对缓存真正的CRUD在Cache组件中,每个缓存组件有自己 唯一  的一个名字cacheNames
     *   几个属性:
     *    1. cacheNames/values:指定缓存组件名称,是数组的方式可以指定存放多个缓存
     *    2. key:缓存数据使用的key,可以用它来指定,默认使用方法参数,
     * 例如参数是1,key就是1,方法返回值是value(employee) 1:employee  缓存起来
     *     key可以使用 SpEl表达式 百度查询
          注意    确保key的值唯一
     *    3.CacheManager:指定从哪个缓存管理器取 或者CacheResolver缓存解析器,两者功能一样
     *    4.Condition:指定符合条件下,才会进行缓存
     *        condition="#id">0 的情况下才会缓存
     *    5.unless:否定缓存,当unless指定的条件时true是就不缓存,可以回去结果进行判断 #result==null;
     *
     * */
    @Cacheable(cacheNames = "{emp}",key ="#root.methodName+'{'+#id+'}'")
    public TbEmployee getEmployeeById(Integer id) {
        TbEmployee employee = employeeDao.getEmployeeById(id);
        System.out.println("查询" + id + "号员工");
        return employee;
    }
    
     /**
     *  @CachePut
     *    该注解表示及调用方法,又更新数据库缓存  同步更新缓存
     *     修改某个数据更新缓存
     *    运行时机:
     *    先调用目标方法,然后把方法的结果缓存起来
     *       key  要和查询的key保持一致
     *
     * @param employee
     */
    @CachePut(value ="{emp}",key = "#result.id")
    public TbEmployee update(TbEmployee employee) {
        employeeDao.updateEmployee(employee);
        return employee;
    }
/***
     *@CacheEvict 清除缓存
     * allEntries = true 清除所有缓存
     * beforeInvocation 是否在方法之前执行,默认是false
     */
    @CacheEvict(value = "{emp}", key = "#id")
    public void delete(Integer id) {
        employeeDao.deleteEmployee(id);
    }

}

おすすめ

転載: blog.csdn.net/yuzheh521/article/details/121188937