Table des matières
1. Introduction
2 Annotations communes
2.1, @EnableCaching
2.2, l'annotation @Cacheable
2.3、@CachePut
2.4、@CacheEvict
3、使用Redis当作缓存产品
3.1、坐标导入
3.2、yml配置
3.3、开启注解功能
3 Utilisez Redis comme produit de mise en cache
4、测试
Maison base de données Redis Comment SpringBoot intègre Spring Cache pour implémenter la mise en cache Redis

Comment SpringBoot intègre Spring Cache pour implémenter la mise en cache Redis

May 27, 2023 am 08:47 AM
redis springboot springcache

    1. Introduction

    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

    2 Annotations communes

    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 :

    Ouvrez la fonction de solution de pari d'altitude@cacheable pour vérifier s'il y a dans le cache avant que la méthode n'exécute l'exécution de la méthode. il y a des données, renvoyez directement les données mises en cache ; s'il n'y a pas de données, appelez la méthode et mettez la valeur de retour de la méthode dans le cacheMettez la valeur de retour de la méthode dans le cacheSupprimer une ou plusieurs données du cache
    Remarque @@ENableCaching
    @CachePut
    @CacheEvict

    2.1, @EnableCaching

    La 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("项目启动成功...");
        }
    }
    Copier après la connexion

    2.2, l'annotation @Cacheable

    @Cacheable est principalement utilisée pour vérifier s'il y a des données dans le cache avant d'exécuter la méthode. S'il y a des données, les données mises en cache sont renvoyées directement ; s'il n'y a pas de données, la méthode est appelée et la valeur de retour de la méthode est placée dans le cache. @Cacheable注解主要是在方法执行前 先查看缓存中是否有数据。如果有数据,则直接返回缓存数据;若没有数据,调用方法并将方法返回值放到缓存中。

    注解中的参数传递主要使用的是**SpEL(Spring Expression Language)**对数据进行获取传递,这有点类似于JSP中的EL表达式,常用方式如下几种:

    • “#p0”:获取参数列表中的第一个参数。其中的“#p”为固定写法,0为下标,代表第一个;

    • “#root.args[0]”:获取方法中的第一个参数。其中0为下标,代表第一个。

    • “#user.id”:获取参数 user 的 id 属性。注意的是这里的 user 必须要和参数列表中的参数名一致

    • “#result.id”:获取返回值中的 id 属性。

    来自Spring Cache源码:Spring Expression Language (SpEL) expression used for making the method

    @Cacheable注解中有几种常用的属性可进行需求性设置:

    • value:缓存的名称,每个缓存名称下面可以有多个 key

    • key:缓存的key。

    • condition:条件判断,满足条件时对数据进行缓存,值得注意的是该参数在Redis中无效

    • The parameter "unless" can be used in Redis as a conditional statement to avoid caching data if a certain condition is met.

    /**
     * @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;
    }
    Copier après la connexion

    2.3、@CachePut

    @CachPut注解主要是将方法的返回值放到缓存中。这里同样是使用SpEL获取数据,常用的属性如下:

    • value:缓存的名称,每个缓存名称下面可以有多个 key

    • key:缓存的key。

    • condition:条件判断,满足条件时对数据进行缓存,值得注意的是该参数在Redis中无效

    • The parameter "unless" can be used in Redis as a conditional statement to avoid caching data if a certain condition is met.

    /**
     * @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;
    }
    Copier après la connexion

    2.4、@CacheEvict

    @CacheeEvict主要是将一条或多条数据从缓存中删除,同样使用SpEL获取数据,常用的属性如下:

    • value:缓存的名称,每个缓存名称下面可以有多个 key

    • key:缓存的key。

    • condition:条件判断,满足条件时对数据进行缓存,值得注意的是该参数在Redis中无效

    • The parameter "unless" can be used in Redis as a conditional statement to avoid caching data if a certain condition is met.

    /**
     * @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;
    }
    Copier après la connexion

    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>
    Copier après la connexion

    3.2、yml配置

    spring:
    redis:
    host: localhost
    port: 6379
    password: 123456
    database: 0
    cache:
    redis:
    time-to-live: 1800000 # 设置缓存有效期

    3.3、开启注解功能

    在启动类 com/itheima/CacheDemoApplication.java

    Le transfert de paramètres dans les annotations utilise principalement **SpEL (Spring Expression Language)** pour obtenir et transférer des données. Ceci est quelque peu similaire aux expressions EL dans JSP. Les méthodes couramment utilisées sont les suivantes :

    "#p0" : Obtenez le premier paramètre de la liste des paramètres. Le "#p" est une méthode d'écriture fixe, et 0 est l'indice, représentant le premier

  • "#root.args[0]" : récupère le premier paramètre de la méthode ; Parmi eux, 0 est l’indice, qui représente le premier.

  • "#user.id" : Obtenez l'attribut id du paramètre user. Notez que l'utilisateur ici doit être cohérent avec le nom du paramètre dans la liste des paramètres

  • "#result.id": Obtenez l'attribut id dans la valeur de retour.

  • À partir du code source de Spring Cache : expression Spring Expression Language (SpEL) utilisée pour créer la méthode🎜🎜Il existe plusieurs attributs couramment utilisés dans l'annotation @Cacheable pour les exigences Paramètres des propriétés : 🎜
    • 🎜value : nom du cache, chaque nom de cache peut avoir plusieurs clés 🎜
    • 🎜key : clé de cache . 🎜
    • 🎜condition : jugement conditionnel, mettre en cache les données lorsque la condition est remplie. Il est à noter que ce paramètre n'est pas valide dans Redis🎜
    • 🎜Le paramètre "sauf si" peut être. utilisé dans Redis comme instruction conditionnelle pour éviter la mise en cache des données si une certaine condition est remplie.🎜
    @Slf4j
    @SpringBootApplication
    @ServletComponentScan
    @EnableCaching
    public class ReggieApplication {
        public static void main(String[] args) {
            SpringApplication.run(ReggieApplication.class, args);
            log.info("springBoot项目启动成功……");
        }
    }
    Copier après la connexion
    🎜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 : 🎜
    • 🎜value : le nom du cache peut avoir plusieurs clés🎜.
    • 🎜key : clé mise en cache. 🎜
    • 🎜condition : jugement conditionnel, mettre en cache les données lorsque la condition est remplie. Il est à noter que ce paramètre n'est pas valide dans Redis🎜
    • 🎜Le paramètre "sauf si" peut être. utilisé dans Redis comme instruction conditionnelle pour éviter la mise en cache des données si une certaine condition est remplie.🎜
    /**
     * @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() + "新增成功");
    }
    Copier après la connexion
    🎜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 : 🎜
    • 🎜value : le nom du cache, chaque nom de cache. peut avoir plusieurs clés🎜
    • 🎜key : clé mise en cache. 🎜
    • 🎜condition : jugement conditionnel, mettre en cache les données lorsque la condition est remplie. Il est à noter que ce paramètre n'est pas valide dans Redis🎜
    • 🎜Le paramètre "sauf si" peut être. utilisé dans Redis comme instruction conditionnelle pour éviter la mise en cache des données si une certaine condition est remplie.🎜
    /**
     * @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("套餐修改成功");
    }
    Copier après la connexion
    Copier après la connexion

    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 :
    redis :< br/> hôte : localhost
    port : 6379
    mot de passe : 123456
    base de données : 0
    cache :
    redis :
    durée de vie : 1800000 # Définissez la période de validité du cache🎜
    🎜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("套餐修改成功");
    }
    Copier après la connexion
    Copier après la connexion

    4、测试

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

    Comment SpringBoot intègre Spring Cache pour implémenter la mise en cache 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!

    Déclaration de ce site Web
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

    Outils d'IA chauds

    Undresser.AI Undress

    Undresser.AI Undress

    Application basée sur l'IA pour créer des photos de nu réalistes

    AI Clothes Remover

    AI Clothes Remover

    Outil d'IA en ligne pour supprimer les vêtements des photos.

    Undress AI Tool

    Undress AI Tool

    Images de déshabillage gratuites

    Clothoff.io

    Clothoff.io

    Dissolvant de vêtements AI

    Video Face Swap

    Video Face Swap

    Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

    Outils chauds

    Bloc-notes++7.3.1

    Bloc-notes++7.3.1

    Éditeur de code facile à utiliser et gratuit

    SublimeText3 version chinoise

    SublimeText3 version chinoise

    Version chinoise, très simple à utiliser

    Envoyer Studio 13.0.1

    Envoyer Studio 13.0.1

    Puissant environnement de développement intégré PHP

    Dreamweaver CS6

    Dreamweaver CS6

    Outils de développement Web visuel

    SublimeText3 version Mac

    SublimeText3 version Mac

    Logiciel d'édition de code au niveau de Dieu (SublimeText3)

    Comment construire le mode Cluster Redis Comment construire le mode Cluster Redis Apr 10, 2025 pm 10:15 PM

    Le mode Redis Cluster déploie les instances Redis sur plusieurs serveurs grâce à la rupture, à l'amélioration de l'évolutivité et de la disponibilité. Les étapes de construction sont les suivantes: Créez des instances de redis étranges avec différents ports; Créer 3 instances Sentinel, Moniteur Redis Instances et basculement; Configurer les fichiers de configuration Sentinel, ajouter des informations d'instance Redis de surveillance et des paramètres de basculement; Configurer les fichiers de configuration d'instance Redis, activer le mode de cluster et spécifier le chemin du fichier d'informations de cluster; Créer un fichier nœuds.conf, contenant des informations de chaque instance redis; Démarrez le cluster, exécutez la commande CREATE pour créer un cluster et spécifiez le nombre de répliques; Connectez-vous au cluster pour exécuter la commande d'informations de cluster pour vérifier l'état du cluster; faire

    Comment effacer les données redis Comment effacer les données redis Apr 10, 2025 pm 10:06 PM

    Comment effacer les données Redis: utilisez la commande flushall pour effacer toutes les valeurs de clé. Utilisez la commande flushdb pour effacer la valeur clé de la base de données actuellement sélectionnée. Utilisez SELECT pour commuter les bases de données, puis utilisez FlushDB pour effacer plusieurs bases de données. Utilisez la commande del pour supprimer une clé spécifique. Utilisez l'outil Redis-CLI pour effacer les données.

    Comment lire la file d'attente redis Comment lire la file d'attente redis Apr 10, 2025 pm 10:12 PM

    Pour lire une file d'attente à partir de Redis, vous devez obtenir le nom de la file d'attente, lire les éléments à l'aide de la commande LPOP et traiter la file d'attente vide. Les étapes spécifiques sont les suivantes: Obtenez le nom de la file d'attente: Nommez-le avec le préfixe de "Fitre:" tel que "Fitre: My-Quyue". Utilisez la commande LPOP: éjectez l'élément de la tête de la file d'attente et renvoyez sa valeur, telle que la file d'attente LPOP: My-Queue. Traitement des files d'attente vides: si la file d'attente est vide, LPOP renvoie NIL et vous pouvez vérifier si la file d'attente existe avant de lire l'élément.

    Comment utiliser la commande redis Comment utiliser la commande redis Apr 10, 2025 pm 08:45 PM

    L'utilisation de la directive Redis nécessite les étapes suivantes: Ouvrez le client Redis. Entrez la commande (Verbe Key Value). Fournit les paramètres requis (varie de l'instruction à l'instruction). Appuyez sur Entrée pour exécuter la commande. Redis renvoie une réponse indiquant le résultat de l'opération (généralement OK ou -err).

    Comment utiliser Redis Lock Comment utiliser Redis Lock Apr 10, 2025 pm 08:39 PM

    L'utilisation des opérations Redis pour verrouiller nécessite l'obtention du verrouillage via la commande setnx, puis en utilisant la commande Expire pour définir le temps d'expiration. Les étapes spécifiques sont les suivantes: (1) Utilisez la commande setnx pour essayer de définir une paire de valeurs de clé; (2) Utilisez la commande Expire pour définir le temps d'expiration du verrou; (3) Utilisez la commande del pour supprimer le verrouillage lorsque le verrouillage n'est plus nécessaire.

    Comment lire le code source de Redis Comment lire le code source de Redis Apr 10, 2025 pm 08:27 PM

    La meilleure façon de comprendre le code source redis est d'aller étape par étape: familiarisez-vous avec les bases de Redis. Sélectionnez un module ou une fonction spécifique comme point de départ. Commencez par le point d'entrée du module ou de la fonction et affichez le code ligne par ligne. Affichez le code via la chaîne d'appel de fonction. Familiez les structures de données sous-jacentes utilisées par Redis. Identifiez l'algorithme utilisé par Redis.

    Comment utiliser la ligne de commande redis Comment utiliser la ligne de commande redis Apr 10, 2025 pm 10:18 PM

    Utilisez l'outil de ligne de commande redis (Redis-CLI) pour gérer et utiliser Redis via les étapes suivantes: Connectez-vous au serveur, spécifiez l'adresse et le port. Envoyez des commandes au serveur à l'aide du nom et des paramètres de commande. Utilisez la commande d'aide pour afficher les informations d'aide pour une commande spécifique. Utilisez la commande QUIT pour quitter l'outil de ligne de commande.

    Comment configurer le temps d'exécution du script LUA dans Centos Redis Comment configurer le temps d'exécution du script LUA dans Centos Redis Apr 14, 2025 pm 02:12 PM

    Sur CentOS Systems, vous pouvez limiter le temps d'exécution des scripts LUA en modifiant les fichiers de configuration Redis ou en utilisant des commandes Redis pour empêcher les scripts malveillants de consommer trop de ressources. Méthode 1: Modifiez le fichier de configuration Redis et localisez le fichier de configuration Redis: le fichier de configuration redis est généralement situé dans /etc/redis/redis.conf. Edit Fichier de configuration: Ouvrez le fichier de configuration à l'aide d'un éditeur de texte (tel que VI ou NANO): Sudovi / etc / redis / redis.conf Définissez le délai d'exécution du script LUA: Ajouter ou modifier les lignes suivantes dans le fichier de configuration pour définir le temps d'exécution maximal du script LUA (unité: millisecondes)

    See all articles