Rumah  >  Artikel  >  pangkalan data  >  Bagaimana SpringBoot menyepadukan Spring Cache untuk melaksanakan cache Redis

Bagaimana SpringBoot menyepadukan Spring Cache untuk melaksanakan cache Redis

PHPz
PHPzke hadapan
2023-05-27 08:47:111280semak imbas

    1. Pengenalan

    Spring Cache ialah rangka kerja yang melaksanakan fungsi caching berasaskan anotasi. Anda hanya perlu menambah anotasi untuk melaksanakan Fungsi caching .

    Spring Cache menyediakan lapisan abstraksi, dan lapisan bawah boleh menukar pelaksanaan cache yang berbeza.

    Khususnya, teknologi caching yang berbeza disatukan melalui antara muka CacheManager.

    CacheManager ialah antara muka abstrak untuk pelbagai teknologi caching yang disediakan oleh Spring Ini ialah teknologi caching lalai dan dicache dalam Map Ini juga bermakna apabila perkhidmatan ditutup, data cache akan hilang.

    Pengurus Cache yang berbeza perlu dilaksanakan untuk teknologi caching yang berbeza

    CacheManager 描述
    EhCacheCacheManager 使用 EhCache 作为缓存技术
    GuavaCacheManager 使用 Google 的 GuavaCache 作为缓存技术
    RedisCacheManager 使用 Redis 作为缓存技术

    2. Anotasi biasa

    Dalam projek Spring Boot, untuk menggunakan teknologi caching, anda hanya perlu importnya dalam pakej Ketergantungan projek untuk teknologi caching yang berkaitan, dan gunakan @EnableCaching pada kelas permulaan untuk mendayakan sokongan caching. Contohnya, untuk menggunakan Redis sebagai teknologi caching, anda hanya perlu mengimport koordinat maven bagi data Spring Redis. Anotasi yang biasa digunakan termasuk yang berikut:

    注解 说明
    @EnableCaching 开启缓存注解功能
    @Cacheable 在方法执行前 spring 先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;若没有数据,调用方法并将方法返回值放到缓存中
    @CachePut 将方法的返回值放到缓存中
    @CacheEvict 将一条或多条数据从缓存中删除

    2.1. @EnableCaching

    Fungsi utama anotasi ini adalah untuk mendayakan fungsi anotasi cache dan menjadikan anotasi Spring Cache yang lain berkesan. Penggunaannya juga sangat mudah, cuma tambahkannya terus di atas kelas permulaan projek.

    @Slf4j
    @SpringBootApplication
    @EnableCaching
    public class CacheDemoApplication {
        public static void main(String[] args) {
            SpringApplication.run(CacheDemoApplication.class, args);
            log.info("项目启动成功...");
        }
    }

    2.2, @Cacheable

    @Cacheable anotasi adalah terutamanya untuk menyemak sama ada terdapat data dalam cache sebelum melaksanakan kaedah. Sekiranya terdapat data, data cache dikembalikan secara langsung jika tiada data, kaedah dipanggil dan nilai pulangan kaedah diletakkan dalam cache.

    Parameter lulus dalam anotasi terutamanya menggunakan **SpEL (Spring Expression Language)** untuk mendapatkan dan menghantar data, yang agak serupa dengan ungkapan EL dalam JSP kaedah yang biasa digunakan adalah seperti berikut:

    • "#p0": Dapatkan parameter pertama dalam senarai parameter. "#p" ialah kaedah penulisan tetap, 0 ialah subskrip, mewakili yang pertama

    • "#root.args[0]": Dapatkan parameter pertama dalam kaedah; . Antaranya, 0 ialah subskrip, yang mewakili yang pertama.

    • "#user.id": Dapatkan atribut id pengguna parameter. Ambil perhatian bahawa pengguna di sini mesti konsisten dengan nama parameter dalam senarai parameter

    • "#result.id": Dapatkan atribut id dalam nilai pulangan.

    Daripada kod sumber Spring Cache: Ekspresi Spring Expression Language (SpEL) yang digunakan untuk membuat kaedah

    Terdapat beberapa atribut yang biasa digunakan dalam @Cacheable anotasi untuk keperluan Tetapan seksual:

    • nilai: Nama cache boleh terdapat berbilang kunci di bawah setiap nama cache . " kecuali " boleh digunakan dalam Redis sebagai pernyataan bersyarat untuk mengelakkan caching data jika syarat tertentu dipenuhi Ia adalah untuk meletakkan nilai pulangan kaedah dalam cache. SpEL juga digunakan untuk mendapatkan data di sini Atribut yang biasa digunakan adalah seperti berikut:

    • nilai: nama cache boleh terdapat berbilang kunci di bawah setiap nama cache

    • kunci: kunci cache. " melainkan" boleh digunakan dalam Redis sebagai pernyataan bersyarat untuk mengelakkan caching data jika syarat tertentu dipenuhi.

    • /**
       * @description 通过id获取用户信息
       * @author xBaozi
       * @date 14:23 2022/7/3
       **/
      @Cacheable(value = "userCache", key = "#id", unless = "#result == null")
      @GetMapping("/{id}")
      public User getById(@PathVariable Long id) {
          User user = userService.getById(id);
          return user;
      }

      2.4, @CacheEvict

    Terutamanya Padamkan satu atau lebih data daripada cache Juga gunakan SpEL untuk mendapatkan data yang biasa digunakan adalah seperti berikut:

    @CachPutnilai: nama cache boleh ada kunci berbilang. " melainkan" boleh digunakan dalam Redis sebagai pernyataan bersyarat untuk mengelakkan caching data jika syarat tertentu dipenuhi.

    • /**
       * @description 新增用户信息并返回保存的信息
       * @author xBaozi
       * @date 14:38 2022/7/3
       **/
      @CachePut(value = "userCache", key = "#user.id")
      @PostMapping
      public User save(User user) {
          userService.save(user);
          return user;
      }

      3. Gunakan Redis sebagai produk caching

    • kerana teknologi caching lalai Spring tidak boleh menyimpan data cache secara berterusan Walaupun perkhidmatan ditutup, cache juga akan ditutup, jadi anda perlu menggunakan Redis untuk operasi (sebenarnya, ia juga kerana anda telah mempelajari Redis)
    • <.>Kod pengesahan cache Redis bersepadu SpringBoot sebelumnya Ia merekodkan beberapa operasi asas Redis.

      3.1, koordinat import
    • Import koordinat maven: spring-boot-starter-data-redis, spring-boot-starter-cache

      /**
       * @description 更新用户信息
       * @author xBaozi
       * @date 14:41 2022/7/3
       **/
      @CacheEvict(value = "userCache", key = "#result.id")
      @PutMapping
      public User update(User user) {
          userService.updateById(user);
          return user;
      }

      3.2, konfigurasi yml
    • spring:

      redis:
    • hos: localhost
    port: 6379

    kata laluan: 123456

    pangkalan data: 0

    cache:@CacheeEvict redis:

    Masa untuk hidup: 1800000 # Tetapkan tempoh sah cache
    • 3.3 Dayakan fungsi anotasi

    • Tambah anotasi @EnableCaching ke kelas permulaan
    • untuk mendayakan fungsi anotasi cache

      <!--Spring Data Redis-->
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-data-redis</artifactId>
      </dependency>
      <!--Spring Cache-->
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-cache</artifactId>
      </dependency>

      3.4. Menggunakan @Cacheable
    • Perlu diingatkan bahawa apabila menggunakan cache, nilai pulangan mesti melaksanakan antara muka bersiri Boleh Bersiri, jika tidak, ralat akan dilemparkan.

      Ini kerana dalam pangkalan data NoSql, tidak ada struktur data yang sepadan dengan jenis asas Java kami, jadi apabila menyimpan dalam pangkalan data NoSql, kami mesti menyerikan objek, dan pada masa yang sama semasa penghantaran rangkaian kami Ia harus diperhatikan bahawa serialVersionUID javabeans dalam kedua-dua aplikasi mestilah konsisten, jika tidak penyahserikatan tidak boleh dilakukan secara normal.
    • @Slf4j
      @SpringBootApplication
      @ServletComponentScan
      @EnableCaching
      public class ReggieApplication {
          public static void main(String[] args) {
              SpringApplication.run(ReggieApplication.class, args);
              log.info("springBoot项目启动成功……");
          }
      }
    • 3.5. Gunakan @CacheEvict

      Atribut baharu dipanggil allEntries, iaitu jenis Boolean yang menunjukkan sama ada semua elemen dalam cache perlu dikosongkan. Lalai adalah palsu, yang bermaksud ia tidak diperlukan. Jika allEntries ditetapkan kepada benar, Spring Cache tidak akan mempertimbangkan kunci yang ditentukan. Kadangkala, ia adalah lebih cekap untuk mengosongkan dan menyimpan semua elemen sekaligus daripada mengosongkan elemen satu demi satu.
    • /**
       * @description 更新套餐信息并更新其关联的菜品
       * @author xBaozi
       * @date 11:28 2022/5/14
       * @param setmealDto    需要更新的套餐信息
       **/
      @CacheEvict(value = "setmealCache",allEntries = true)
      @PutMapping
      public Result<String> updateWithDish(@RequestBody SetmealDto setmealDto) {
          log.info(setmealDto.toString());
          setmealService.updateWithDish(setmealDto);
          return Result.success("套餐修改成功");
      }

      4、测试

      代码编写完成之后,重启工程,然后访问后台管理系统,对套餐数据进行新增以及删除,而后观察Redis中的数据发现写的代码是能正常跑到!成功!

      Bagaimana SpringBoot menyepadukan Spring Cache untuk melaksanakan cache Redis

    Atas ialah kandungan terperinci Bagaimana SpringBoot menyepadukan Spring Cache untuk melaksanakan cache Redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam