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 作为缓存技术 |
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 | 将一条或多条数据从缓存中删除 |
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("项目启动成功..."); } }
@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
@CachPut
nilai: 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
/** * @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; }
spring:
redis: cache:@CacheeEvict
redis:
3.3 Dayakan fungsi anotasi
<!--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>
@Slf4j @SpringBootApplication @ServletComponentScan @EnableCaching public class ReggieApplication { public static void main(String[] args) { SpringApplication.run(ReggieApplication.class, args); log.info("springBoot项目启动成功……"); } }
/** * @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("套餐修改成功"); }
代码编写完成之后,重启工程,然后访问后台管理系统,对套餐数据进行新增以及删除,而后观察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!