Maison >base de données >Redis >Comment SpringBoot intègre Spring Cache pour implémenter la mise en cache Redis
Spring Cache est un framework qui implémente la fonction de mise en cache basée sur les annotations. Il vous suffit d'ajouter une annotation pour réaliser la fonction de mise en cache.
Spring Cache fournit une couche d'abstraction et la couche inférieure peut changer différentes implémentations de cache.
Plus précisément, différentes technologies de mise en cache sont unifiées via l'interface CacheManager.
CacheManager est une interface abstraite pour diverses technologies de mise en cache fournies par Spring. Il s'agit de la technologie de mise en cache par défaut et elle est mise en cache dans Map. Cela signifie également que lorsque le service raccroche, les données mises en cache disparaîtront.
Différents CacheManagers doivent être implémentés pour différentes technologies de mise en cache
CacheManager | Description |
---|---|
EhCacheCacheManager | Utiliser EhCache comme technologie de mise en cache |
GuavaC ache Manager | utilise GuavaCache de Google comme technologie de mise en cache |
RedisCacheManager | Utilisez Redis comme technologie de mise en cache |
Dans le projet Spring Boot, pour utiliser la technologie de mise en cache, il vous suffit d'importer le package de dépendances de la technologie de mise en cache appropriée dans le projet. et utilisez-le sur la classe de démarrage @EnableCaching
Activez simplement la prise en charge de la mise en cache. Par exemple, pour utiliser Redis comme technologie de mise en cache, il vous suffit d'importer les coordonnées maven de Spring data Redis. Les annotations couramment utilisées sont les suivantes :
Remarque | @@ENableCaching |
---|---|
@CachePut | |
@CacheEvict | |
2.1, @EnableCachingLa fonction principale de cette annotation est d'activer la fonction d'annotation de cache et de faire prendre effet aux autres annotations Spring Cache. L'utilisation est également très simple, il suffit de l'ajouter directement au-dessus de la classe de démarrage du projet. @Slf4j @SpringBootApplication @EnableCaching public class CacheDemoApplication { public static void main(String[] args) { SpringApplication.run(CacheDemoApplication.class, args); log.info("项目启动成功..."); } } 2.2, l'annotation @Cacheable
注解中的参数传递主要使用的是**SpEL(Spring Expression Language)**对数据进行获取传递,这有点类似于JSP中的EL表达式,常用方式如下几种:
来自Spring Cache源码:Spring Expression Language (SpEL) expression used for making the method 在
/** * @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.3、@CachePut
/** * @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; } 2.4、@CacheEvict
/** * @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、使用Redis当作缓存产品因为 Spring 默认的缓存技术无法持久化保存缓存数据,即服务挂了缓存也挂了,因此就需要使用Redis进行操作(其实也是因为学习了Redis) 前面的SpringBoot整合Redis缓存验证码里面有记录着一些Redis的基本操作。 3.1、坐标导入导入 maven 坐标:spring-boot-starter-data-redis、spring-boot-starter-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.2、yml配置
3.3、开启注解功能在启动类 @Cacheable pour les exigences Paramètres des propriétés : 🎜
@Slf4j @SpringBootApplication @ServletComponentScan @EnableCaching public class ReggieApplication { public static void main(String[] args) { SpringApplication.run(ReggieApplication.class, args); log.info("springBoot项目启动成功……"); } }🎜2.3, l'annotation @CachePut🎜🎜 @CachPut renvoie principalement la valeur de retour de la méthode Mettez-le dans le cache. SpEL est également utilisé pour obtenir des données ici. Les attributs couramment utilisés sont les suivants : 🎜
/** * @description 新增套餐信息 * @author xBaozi * @date 17:55 2022/5/13 * @param setmealDto 需要新增套餐的数据 **/ @CacheEvict(value = "setmealCache",allEntries = true) @PostMapping public Result<String> save(@RequestBody SetmealDto setmealDto) { log.info("套餐信息为{}", setmealDto); setmealService.saveWithDish(setmealDto); return Result.success("套餐" + setmealDto.getName() + "新增成功"); }🎜2.4, @CacheEvict🎜🎜 @CacheeEvict met principalement en cache un ou plusieurs éléments de données Supprimez du cache et utilisez également SpEL pour obtenir des données. Les attributs couramment utilisés sont les suivants : 🎜
/** * @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("套餐修改成功"); } 3 Utilisez Redis comme produit de mise en cache🎜Parce que la technologie de mise en cache par défaut de Spring est. non durable Les données mises en cache seront enregistrées automatiquement, même si le service est en panne, le cache sera également en panne, vous devez donc utiliser Redis pour le fonctionnement (en fait, c'est aussi parce que vous avez appris Redis) 🎜🎜Le SpringBoot précédent Le code de vérification du cache d'intégration Redis enregistre certaines opérations de base de Redis. 🎜🎜3.1, importation de coordonnées🎜🎜Importer les coordonnées maven : spring-boot-starter-data-redis, spring-boot-starter-cache🎜rrreee🎜3.2, configuration yml🎜🎜spring :🎜3.3 Activez la fonction d'annotation🎜🎜Ajoutez l'annotation @EnableCaching à la classe de démarrage com/itheima/CacheDemoApplication.java pour activer la fonction d'annotation du cache🎜. rrreee🎜3.4. Utilisez @Cacheable🎜🎜Il convient de rappeler que lors de l'utilisation du cache, la valeur de retour doit implémenter l'interface de sérialisation Serialisable, sinon une erreur sera générée. 🎜🎜En effet, dans la base de données NoSql, il n'y a pas de structure de données correspondant à nos types de base Java, donc lors du stockage dans la base de données NoSql, nous devons sérialiser l'objet en même temps, nous devons faire attention à deux choses lors du réseau. transmission. Le SerialVersionUID des javabeans dans chaque application doit être cohérent, sinon la désérialisation ne peut pas être effectuée normalement. 🎜rrreee🎜3.5, en utilisant @CacheEvict🎜🎜Le nouvel attribut s'appelle allEntries, qui est un type booléen utilisé pour indiquer si tous les éléments du cache doivent être effacés. La valeur par défaut est false, ce qui signifie que ce n'est pas nécessaire. Si allEntries est défini sur true, Spring Cache ne prendra pas en compte la clé spécifiée. Parfois, il est plus efficace d'effacer et de mettre en cache tous les éléments en même temps plutôt que de les effacer un par un. 🎜/** * @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中的数据发现写的代码是能正常跑到!成功! |
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!