


Comment mettre en cache les données de la base de données sur Redis via des annotations de cache personnalisées dans SpringBoot
Implémentation
Créez d'abord une nouvelle table bus_student dans Mysql
Utilisez ensuite la génération de code basée sur cette table, Vue frontale et la génération de code back-end pour chaque couche et ajoutez des menus.
Venons-en ensuite au code d'arrière-plan. Dans le framework d'arrière-plan, les dépendances et classes d'outils pertinentes pour faire fonctionner Redis ont été ajoutées.
Mais ici, vous devez également ajouter des dépendances d'aspect
<!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects --><dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>4.3.14.RELEASE</version> </dependency>
Créez ensuite des annotations pour ajouter le cache Redis
package com.ruoyi.system.redisAop; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/* * @Author * @Description 新增redis缓存 **/@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD)public @interface AopCacheEnable {//redis缓存key String[] key();//redis缓存存活时间默认值(可自定义)long expireTime() default 3600; }
et supprimez les annotations pour le cache Redis
package com.ruoyi.system.redisAop; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/* * @Description 删除redis缓存注解 **/@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME)public @interface AopCacheEvict {//redis中的key值 String[] key(); }
où la classe de configuration est stockée
package com.ruoyi.system.redisAop; import com.ruoyi.system.domain.BusStudent; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.Signature; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit;/* * @Description 自定义缓存切面具体实现类 **/@Aspect @Componentpublic class CacheEnableAspect { @Autowiredpublic RedisTemplate redisCache;/** * Mapper层切点 使用到了我们定义的 AopCacheEnable 作为切点表达式。 */@Pointcut("@annotation(com.ruoyi.system.redisAop.AopCacheEnable)")public void queryCache() { }/** * Mapper层切点 使用到了我们定义的 AopCacheEvict 作为切点表达式。 */@Pointcut("@annotation(com.ruoyi.system.redisAop.AopCacheEvict)")public void ClearCache() { } @Around("queryCache()")public Object Interceptor(ProceedingJoinPoint pjp) { Object result = null;//注解中是否有#标识boolean spelFlg = false;//判断是否需要走数据库查询boolean selectDb = false;//redis中缓存的keyString redisKey = "";//获取当前被切注解的方法名Method method = getMethod(pjp);//获取当前被切方法的注解AopCacheEnable aopCacheEnable = method.getAnnotation(AopCacheEnable.class);//获取方法参数值Object[] arguments = pjp.getArgs();//从注解中获取字符串String[] spels = aopCacheEnable.key();for (String spe1l : spels) {if (spe1l.contains("#")) {//注解中包含#标识,则需要拼接spel字符串,返回redis的存储redisKeyredisKey = spe1l.substring(1) + arguments[0].toString(); } else {//没有参数或者参数是List的方法,在缓存中的keyredisKey = spe1l; }//取出缓存中的数据result = redisCache.opsForValue().get(redisKey);//缓存是空的,则需要重新查询数据库if (result == null || selectDb) {try { result = pjp.proceed();//从数据库查询到的结果不是空的if (result != null && result instanceof ArrayList) {//将redis中缓存的结果转换成对象listList<BusStudent> students = (List<BusStudent>) result;//判断方法里面的参数是不是BusStudentif (arguments[0] instanceof BusStudent) {//将rediskey-students 存入到redisredisCache.opsForValue().set(redisKey, students, aopCacheEnable.expireTime(), TimeUnit.SECONDS); } } } catch (Throwable e) { e.printStackTrace(); } } }return result; }/*** 定义清除缓存逻辑,先操作数据库,后清除缓存*/@Around(value = "ClearCache()")public Object evict(ProceedingJoinPoint pjp) throws Throwable {//redis中缓存的keyMethod method = getMethod(pjp);// 获取方法的注解AopCacheEvict cacheEvict = method.getAnnotation(AopCacheEvict.class);//先操作dbObject result = pjp.proceed();// 获取注解的key值String[] fieldKeys = cacheEvict.key();for (String spe1l : fieldKeys) {//根据key从缓存中删除 redisCache.delete(spe1l); }return result; }/** * 获取被拦截方法对象 */public Method getMethod(ProceedingJoinPoint pjp) { Signature signature = pjp.getSignature(); MethodSignature methodSignature = (MethodSignature) signature; Method targetMethod = methodSignature.getMethod();return targetMethod; } }
Créez ensuite une nouvelle implémentation d'aspect de cache personnalisée class CacheEnableAspect
Storage location
@AopCacheEnable(key = "BusStudent",expireTime = 40)public List<BusStudent> selectBusStudentList(BusStudent busStudent);
Faites attention à queryCache et ClearCache ici, les expressions pointcut à l'intérieur
correspondent respectivement aux deux AopCacheEnable et AopCacheEvict personnalisés.
Ensuite, avant et après l'exécution de la méthode queryCache entourant la notification,
obtient les paramètres de la méthode cut et la clé dans le paramètre, puis interroge redis en fonction de la clé
Si elle ne peut pas être trouvée, convertissez la. renvoie le résultat de la méthode dans la liste d'objets et stockez-le dans redis
S'il peut être trouvé, le résultat sera renvoyé.
Recherchez ensuite la méthode de requête et la couche de mappage de cette table. Par exemple, si vous souhaitez stocker les résultats de la requête dans redis
/** * 新增学生 * * @param busStudent 学生 * @return 结果 */@AopCacheEvict(key = "BusStudent")public int insertBusStudent(BusStudent busStudent);/** * 修改学生 * * @param busStudent 学生 * @return 结果 */@AopCacheEvict(key = "BusStudent")public int updateBusStudent(BusStudent busStudent);/** * 删除学生 * * @param id 学生ID * @return 结果 */@AopCacheEvict(key = "BusStudent")public int deleteBusStudentById(Integer id);
Ajoutez ensuite
rrreeeaux méthodes de mappage pour ajouter, modifier et supprimer cette table. Faites attention aux annotations ici. La clé doit être cohérente avec la clé de l'annotation de la requête ci-dessus.
Ensuite, démarrez le projet, s'il vous invite au démarrage :
le consommateur pour qu'il acce
Parce que sringboot a constaté qu'il existe plusieurs classes d'implémentation de l'interface via @ Autowired, c'est-à-dire que plusieurs classes héritent de cette interface et que le conteneur Spring ne sait pas laquelle utiliser.
Trouvez la classe de configuration de redis, ajoutez l'annotation @Primary sur le RedisTemplate
Vérifiez l'utilisation de l'annotation
Démarrez le projet avec debug, interrogez le point d'arrêt dans l'annotation dans CacheEnableAspect, puis appelez la requête méthode,
vous pouvez voir Une fois que vous pouvez entrer le point d'arrêt, vous pouvez modifier les annotations selon la logique et l'effet souhaités.
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!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

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

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).

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.

Redis utilise une architecture filetée unique pour fournir des performances élevées, une simplicité et une cohérence. Il utilise le multiplexage d'E / S, les boucles d'événements, les E / S non bloquantes et la mémoire partagée pour améliorer la concurrence, mais avec des limites de limitations de concurrence, un point d'échec unique et inadapté aux charges de travail à forte intensité d'écriture.

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.

Pour afficher toutes les touches dans Redis, il existe trois façons: utilisez la commande Keys pour retourner toutes les clés qui correspondent au modèle spécifié; Utilisez la commande SCAN pour itérer les touches et renvoyez un ensemble de clés; Utilisez la commande info pour obtenir le nombre total de clés.

MySQL est un système de gestion de la base de données relationnel open source, principalement utilisé pour stocker et récupérer les données rapidement et de manière fiable. Son principe de travail comprend les demandes des clients, la résolution de requête, l'exécution des requêtes et les résultats de retour. Des exemples d'utilisation comprennent la création de tables, l'insertion et la question des données et les fonctionnalités avancées telles que les opérations de jointure. Les erreurs communes impliquent la syntaxe SQL, les types de données et les autorisations, et les suggestions d'optimisation incluent l'utilisation d'index, les requêtes optimisées et la partition de tables.

Les étapes pour démarrer un serveur Redis incluent: Installez Redis en fonction du système d'exploitation. Démarrez le service Redis via Redis-Server (Linux / MacOS) ou Redis-Server.exe (Windows). Utilisez la commande redis-Cli Ping (Linux / MacOS) ou redis-Cli.exe Ping (Windows) pour vérifier l'état du service. Utilisez un client redis, tel que redis-cli, python ou node.js pour accéder au serveur.
