Spring-Data-Redis 缓存@Cacheable、@CacheEvict、@CachePut的用法

Spring为我们提供了几个注解来支持Spring Cache。

  • @Cacheable 每次查询,将查询结果放入缓存中 相同id,第二次查询时只从缓存中取数据,不从数据库中取,提高数据查询效率
  • @CacheEvict CacheEvict 删除的数据,要将缓存中的信息清除
  • @CachePut 每次都触发真实的方法调用,将执行结果放入缓存中,更新数据库的时候会更新缓存
   /**
     * Cacheable 每次查询,将查询结果放入缓存中
     *           相同id,第二次查询时只从缓存中取数据,提高数据查询效率
     *           key = "#id" : 表示在redis中k-v(key:id,value:PageDemoDto)
     * @param id
     * @return
     */
    @Override
    @Cacheable(value = "pageCache",key = "#id")
    public PageDemoDto findById(String id) {
        System.out.println("从关系数据库中查询!");
        return pageDemoDao.findById(id);
    }
    /**
     * CacheEvict 删除的数据,要将缓存中的信息清除
     * @param pdd
     */
    @Override
    @Transactional
    @CacheEvict(value = "pageCache",key = "#pdd.id")
    public void deleteData(PageDemoDto pdd) {
        pageDemoDao.deleteById(pdd);
    }
    /**
     * CachePut 每次都触发真实的方法调用,将执行结果放入缓存中
     *          update 和 insert 实现方式一样
     * @param pdd
     * @return
     */
    @Override
    @CachePut(value = "pageCache",key = "#pdd.id")
    public PageDemoDto insertData(PageDemoDto pdd) {
//        insert(pdd);
        pageDemoDao.updateData(pdd);
        //插入(或更新)关系数据库后,重新按id查询出来,放入缓存中
        return pageDemoDao.findById(pdd.getId());
    }
    /**
     * List<?> 对象不建议纳入缓存管理,
     *         数据精确度降低缓存刷新难度大
     *         key利用配置的生成器来生成
     * @return
     */
    @Override
    @Cacheable(value = "pageCache",keyGenerator = "wiselyKeyGenerator")
    public List<PageDemoDto> findAll() {
        return pageDemoDao.findAll();
    }

文章作者: Ciwei
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Ciwei !
  目录