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要如何配置。

  • 相关阅读:
    Python中的list和tuple
    Python中输出格式化的字符串
    Python笔记-第一天
    在Lingo中输入矩阵(通过Excel)
    将Matlab中的矩阵输出到txt文件
    SQL中对于两个不同的表中的属性取差集except运算
    SQL中union运算操作的理解
    SQL笔记----在一个关系表中操作列
    MathType的公式在word中跟文字不对齐
    开发android过程中eclipse闪退解决
  • 原文地址:https://www.cnblogs.com/iceb/p/9199757.html
Copyright © 2011-2022 走看看