zoukankan      html  css  js  c++  java
  • SpringBoot日记——Cache缓存篇

    通常我们访问数据的情况如下图,数据存缓存就取缓存,不存缓存就取数据库,这样可以提升效率,不用一直读取数据库的信息:

    开始记录:

    关于SpringBoot缓存的应用

    1. 首先在pom.xml文件中添加如下:

    <dependency>
          <!-- cache缓存 -->
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-cache</artifactId>
    </dependency>

    2.在application的main方法中添加注解 @EnableCaching ,以开启缓存注解的应用:

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

    3.在service等需要添加入缓存的方法前加入注解 @Cacheable (使用缓存,不调用方法)

        /**
         * 根据ID查找用户信息,将方法运行结果进行缓存:以后再要相同数据,直接从缓存取,不需要调用方法;
         */
        @Cacheable(cacheNames = {"cache1"})  //cacheNames或value都可以,表示你自定义的缓存容器的名字,这里使用大括号是说明可以存在多个缓存中使用
        public User findById(Integer id) {
            log.info("查询 ID=" + id + " 的结果");
            User byId = userDao.findById(id);
            return byId;
        }

      3.1 缓存参数及条件的使用,采用pESL写法:

    //  key表示该缓存的key,值是方法中的value; condition表示如果xx就使用缓存; unless表示如果xx就不使用缓存;
    // 可以在condition或unless的双引号中用and来拼各种其他条件
    @Cacheable(cacheNames = {"acc"}, key= "#root.methodName",condition = "#id>2",unless = "#a0==null")

    4. 在service或需要的方法前加入@CachePut注解(即调用方法,又写数据库),用于修改数据库或更新缓存

        @CachePut(value = "acc",key = "#user.id")
        public User update(User user) {
            System.out.println("更新信息" + user);
            userDao.update(user);
            return user;
        }

    5.清除缓存,@CacheEvict。通常使用allEntries = true可以清除全部缓存,即不用单独制定key

        @CacheEvict(value = "acc", allEntries = true)
        public void delete(Integer id) {
            userDao.delete(id);
        }

     6.如果需要许多条件的叠加,使用@Caching,图示例子如下:

    7. service下边每个方法都要写缓存名字比较麻烦,通常我们将总的名字写在service的类前边,@CacheConfig(cacheNames = {"emp"}),依次类推,把公共的缓存配置都写在这里就可以了;

      通常来说,我们在开发过程中,多使用的是缓存中间件,比如:Redis、memcached、ehcache等;

      SpringBoot默认使用的是SimpleCacheConfiguration的配置,然而还有许多其他的配置可用,那么我们后边来看一下Redis要如何配置。

  • 相关阅读:
    Vue学习笔记(4)-带参数路由,嵌套路由,编程式导航
    JS数组&&数组对象去重
    Vue学习笔记(3)-品牌管理系统
    Vue学习笔记(2)-组件生命周期
    负margin
    CSS布局奇淫巧计之-强大的负边距
    由浅入深漫谈margin属性
    双飞翼布局和圣杯布局的对比
    圣杯布局的实现过程
    CSS实现垂直居中的5种方法
  • 原文地址:https://www.cnblogs.com/iceb/p/9199757.html
Copyright © 2011-2022 走看看