• Spring Boot 之 springcache的使用


    一、开启 springcache,启动类添加 @EnableCaching 注解

    @SpringBootApplication
    @EnableCaching
    public class GatheringApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(GatheringApplication.class, args);
        }
    }

    二、添加缓存,修改 findById 方法 通过 @Cacheable 添加缓存

        /**
         * 根据ID查询实体
         * @param id
         * @return
         */
        @Cacheable(value = "gathering",key = "#id")
        public Gathering findById(String id) {
            System.out.println("查询次数:"+i++);
            return gatheringDao.findById(id).get();
        }

    三、删除缓存,修改 update 和 deleteById 方法 通过 @CacheEvict 删除缓存

    /**
         * 修改
         * @param gathering
         */
        @CacheEvict(value = "gathering",key = "#gathering.id")
        public void update(Gathering gathering) {
            gatheringDao.save(gathering);
        }
    
        /**
         * 删除
         * @param id
         */
        @CacheEvict(value = "gathering",key = "#id")
        public void deleteById(String id) {
            gatheringDao.deleteById(id);
        }

    四、执行结果

    1、点击了5次查询,只有一次进入了方法体并,访问了数据库。其余4次都是从缓存中取数据。

      查询次数:1   Hibernate: select gathering0_.id as id1_0_0_, gathering0_.address as address2_0_0_ from tb_gathering gathering0_ where gathering0_.id=?

    2、执行修改方法

       Hibernate: select gathering0_.id as id1_0_0_, gathering0_.address as address2_0_0_ from tb_gathering gathering0_ where gathering0_.id=?
       Hibernate: update tb_gathering set address=?, city=?, detail=?, endtime=?, enrolltime=?, where id=?

     3、再次查询(点击5次),因为执行 修改方法时,也删除了缓存,所以本次查询可以进入方法体,并交互数据库

       查询次数:2
       Hibernate: select gathering0_.id as id1_0_0_, gathering0_.address as address2_0_0_ from tb_gathering gathering0_ where gathering0_.id=?

     4、执行删除方法

       Hibernate: select gathering0_.id as id1_0_0_, gathering0_.address as address2_0_0_ from tb_gathering gathering0_ where gathering0_.id=?
       Hibernate: delete from tb_gathering where id=?

     5、再次查询(点击5次),因为执行 删除方法时,也删除了缓存,所以本次查询可以进入方法体,并交互数据库,但未查询出结果 

       查询次数:3
        Hibernate: select gathering0_.id as id1_0_0_, gathering0_.address as address2_0_0_ from tb_gathering gathering0_ where gathering0_.id=?

  • 相关阅读:
    HTML5学习
    Python随手记
    Python学习之warn()函数
    Redis学习
    多线程--wait()和notify(),Thread中的等待和唤醒方法
    Interrupt中断线程注意点
    Thread中yield方法
    mysql创建唯一索引,避免数据重复插入
    Jquery自动补全插件的使用
    linux ssh免密登陆远程服务器
  • 原文地址:https://www.cnblogs.com/mww-NOTCOPY/p/11312284.html
Copyright © 2020-2023  润新知