Maison  >  Article  >  base de données  >  Comment configurer et utiliser Redis

Comment configurer et utiliser Redis

王林
王林avant
2023-05-31 23:31:171659parcourir

Spring-data-redis est la partie de support redis du module spring-data, appelée "SDR". Elle fournit un haut degré d'encapsulation basé sur l'API client jedis et l'intégration avec le conteneur spring. Le client est assez simple et léger, mais spring-data-redis est soupçonné d'être "sur-conçu".
Le client jedis présente les lacunes suivantes dans la mise en œuvre de la programmation :
1) La gestion des connexions manque d'automatisation et la conception du pool de connexions ne prend pas en charge les conteneurs nécessaires.
2) Les opérations de données doivent faire attention à la "sérialisation"/"désérialisation", car les types de données acceptés par l'API client de jedis sont les chaînes et les octets, et une prise en charge supplémentaire est nécessaire pour les opérations de données structurées (json, xml, pojo).
3) Les opérations de transaction sont purement codées en dur
4) La fonction pub/sub ne prend pas en charge les modèles de conception nécessaires, ce qui nécessite trop d'attention de la part des développeurs.
1. Scénarios d'utilisation de Redis
Redis est une base de données de valeurs-clés de type journal open source écrite en langage ANSI C, prend en charge le réseau, peut être basée sur la mémoire et persistante, et fournit des API dans plusieurs langues.
Nous savons tous que dans les applications quotidiennes, les goulots d'étranglement des bases de données sont les plus susceptibles de se produire. En raison de la grande quantité de données et des requêtes fréquentes, les performances du projet deviennent de plus en plus faibles en raison des limitations des performances des E/S du disque.
À l'heure actuelle, le cadre de mise en cache basé sur la mémoire peut résoudre bon nombre de nos problèmes. Par exemple Memcache, Redis, etc. Mettre certaines données fréquemment utilisées dans le cache pour les lire réduit considérablement la charge sur la base de données. Performances du système améliorées. En fait, il en va de même pour le cache de deuxième niveau d'hibernate et de Mybatis. Utilisez la vitesse de lecture et d'écriture rapide de la mémoire pour résoudre le goulot d'étranglement du disque dur.

2. Configurez et utilisez redis

La configuration est la suivante dans applicationContext-dao.xml :

  1. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  2. xmlns:context="http://www.springframework.org/schema/context"

  3. xmlns:mongo="http://www.springframework.org/schema/data/mongo"

  4. xmlns:aop="http://www.springframework.org/schema/aop"

  5. xsi:schemaLocation="http://www.springframework.org/schema/beans

  6.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            

  7.               

  8.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  

  9.               

  10.           

  11.           

  12.       

  13.            

  14.            

  15.            

  16.            

  17.       

  18.            

  19.           

  20.           

  21.           

  22.       

  23.       

  24.               

  25.               

  26.               

  27.               

  28.               

  29.       

  30.   

  31.   

base de données.properties redis.maxIdle=10  

  1. redis.maxActive=20  

  2. redis.maxWait=10000  

  3. redis.testOnBorrow=true  

  4. redis.host=192.168.1.76  

  5. redis.port=6379  

  6. redis.pass=password1    sdr提供了4种内置的sérialiseur:

  7. JdkSerializationRedisSerializer:JDK的序列化手段(sérialisable接口,ObjectInputStrean,ObjectOutputStream),数据以字节流存储,POJO对象的存取场景,使用JD K本身序列化机制,将pojo类通过ObjectInputStream/ObjectOutputStream进行序列化操作,最终redis-server中将存储字节序列,是目前最常用的序列化策略。

StringRedisSerializer : paramètres de chaîne, valeurs de chaîne et valeur de clé, valeurs de jeu de caractères et valeurs de chaîne. , par exemple "new String(bytes, charset)" et "string.getBytes( charset)”

  • JacksonJsonRedisSerializer : stockage au format json, l'outil jackson-json offre des capacités de conversion entre javabean et json. Il peut sérialiser les instances pojo au format json et les stocker dans redis, ou convertir les données au format json en instances pojo. Étant donné que l'outil Jackson doit spécifier explicitement le type de classe lors de la sérialisation et de la désérialisation, cette stratégie est légèrement plus compliquée à encapsuler. [Nécessite la prise en charge de l'outil Jackson-mapper-asl]

  • OxmSerializer : stockage au format XML, offrant la possibilité de convertir des javabeans en XML. Le support tiers actuellement disponible inclut jaxb, apache-xmlbeans ; les données stockées dans Redis seront des outils XML. Cependant, l'utilisation de cette stratégie rendra la programmation plus difficile et la plus efficace ; elle n'est pas recommandée ; [Nécessite la prise en charge du module spring-oxm]

  • Parmi eux, JdkSerializationRedisSerializer et StringRedisSerializer sont les stratégies de sérialisation les plus basiques. Parmi eux, "JacksonJsonRedisSerializer" et "OxmSerializer" sont basés sur le stockage de chaînes, ils constituent donc une sérialisation plus "avancée" (utilisant éventuellement l'analyse de chaînes et la construction d'objets Java). JdkSerializationRedisSerializer et StringRedisSerializer sont les stratégies les plus basiques pour la "sérialisation et la sérialisation". En principe, nous pouvons stocker des données dans n'importe quel format pour l'accès et l'analyse des applications (les applications incluent app, hadoop et d'autres outils), mais il n'est toujours pas recommandé d'utiliser " JacksonJsonRedisSerializer" et "OxmSerializer" directement au moment de la conception, car qu'il s'agisse de json ou de xml, ils sont eux-mêmes toujours des chaînes. Si vos données doivent être analysées par des outils tiers, elles doivent utiliser StringRedisSerializer au lieu de JdkSerializationRedisSerializer.

    ​ 4 types de sérialiseurs doivent être déclarés dans RedisTemplate, la valeur par défaut est "JdkSerializationRedisSerializer":

    1) keySerializer : pour les opérations K-V ordinaires, la stratégie de sérialisation adoptée par la clé
    2) valueSerializer : la stratégie de sérialisation adoptée par la valeur
    3) hashKeySerializer : dans la structure des données de hachage, la sérialisation de la stratégie de clé de hachage# 🎜🎜# 4) hashValueSerializer : stratégie de sérialisation des valeurs de hachage

    Dans tous les cas, il est recommandé que key/hashKey utilise StringRedisSerializer.

    spring-data-redis fournit les fonctions suivantes pour les jedis :

    #🎜 🎜#   1. Le pool de connexions est géré automatiquement et fournit une classe "RedisTemplate" hautement encapsulée ​ 2. Classifié et encapsulé un grand nombre d'API dans le client jedis, et encapsulé le même type d'opérations dans des interfaces d'opération

      ValueOperations : opération K-V simple
    • SetOperations : définir l'opération de données de type
    • ZSetOperations : opération de données de type zset
    • HashOperations : Opérations de données pour le type de carte
    • ListOperations : Opérations de données pour le type de liste
    • 3. Fournit une API d'opération pratique « liée » (liaison) pour les clés. Vous pouvez encapsuler la clé spécifiée via la liaison, puis effectuer une série d'opérations sans spécifier à nouveau « explicitement » la clé, c'est-à-dire BoundKeyOperations : #🎜🎜 #.

    BoundValueOperations
    • Opérations BoundSet
    • Opérations BoundList
    • Opérations BoundSet
    • BoundHashOperations
    • 3. Utilisation de RedisTemplate
    • En tant que classe de modèle, cette classe fournit de nombreuses API pour utiliser rapidement Redis sans avoir à maintenir vous-même les connexions et les transactions. Initialement, le BaseRedisDao que j'ai créé hérité de cette classe. L'avantage de l'héritage est que dans chacun de mes Dao, je peux contrôler librement le sérialiseur et si j'ai besoin de transactions, je n'ai pas besoin de comprendre cela au préalable, suivez simplement ma méthode de configuration actuelle. Le modèle fournit une série d'opérations, telles que valueOperation, HashOperation, ListOperation, SetOperation, etc., utilisées pour faire fonctionner Redis de différents types de données. De plus, RedisTemplate fournit également le *OperationsEditor correspondant, qui est utilisé pour injecter directement l'opération correspondante via RedisTemplate.
    Code de base :



    paquet com.npf.dao.impl
    1. importer java.util.ArrayList ;
    2. importer java.util.List ;
    3. importer java.util.Map; importer java.util.Map.Entry; ​
    4. importer javax.annotation.Resource; ​
    5. importer org.springframework.beans.factory.annotation.Autowired
    6. ; importer org.springframework.data.redis.core.HashOperations
    7. ; importer org.springframework.data.redis.core.RedisTemplate; importer org.springframework.stereotype.Repository ;
    8.   

    9. importer com.npf.dao.StudentDao ;  

    10. importer com.npf.model.Student ;  

    11.   

    12. @Dépôt  

    13. classe publique StudentDaoImpl implémente StudentDao{  

    14.   

    15.     @Autowired  

    16.     privé RedisTemplate redisTemplate ;  

    17.       

    18.     @Resource(name="redisTemplate")  

    19.     private HashOperations opsForHash ;  

    20.       

    21.     public static final String STUDENT = "étudiant" ;  

    22.       

    23.     @Override  

    24.     public void save(Étudiant étudiant) {  

    25.         opsForHash.put(ÉTUDIANT, étudiant.getId(), étudiant);  

    26.     }  

    27.   

    28.     @Override  

    29.     public Student find(String id) {  

    30.         Étudiant étudiant = opsForHash.get(ÉTUDIANT, id);  

    31.         revenir étudiant ;  

    32.     }  

    33.   

    34.     @Override  

    35.     public void delete (String id) {  

    36.         opsForHash.delete(ÉTUDIANT, identifiant);  

    37.     }  

    38.   

    39.     @Override  

    40.     mise à jour publique (Étudiant étudiant) {  

    41.         opsForHash.put(ÉTUDIANT, étudiant.getId(), étudiant);  

    42.     }  

    43.   

    44.     @Override  

    45.     liste publique<Étudiant> findAll() {  

    46.         Carte entrées = opsForHash.entries(ÉTUDIANT);  

    47.         Liste<Étudiant> stuList = new ArrayList();  

    48.         for(Entry entry : entries.entrySet()){  

    49.             stuList.add(entry.getValue());  

    50.         }  

    51.         renvoyer stuList ;  

    52.     }  

    53. }  

    控制层代码如下:

    1. package com.npf.controller ;  

    2.   

    3. importer java.util.List ;  

    4. importer java.util.UUID ;  

    5.   

    6. importer org.springframework.beans.factory.annotation.Autowired ;  

    7. importer org.springframework.stereotype.Controller ;  

    8. importer org.springframework.ui.Model ;  

    9. importer org.springframework.web.bind.annotation.RequestMapping ;  

    10. importer org.springframework.web.bind.annotation.RequestParam ;  

    11.   

    12. importer com.npf.model.Student ;  

    13. importer com.npf.service.StudentService ;  

    14.   

    15. @Contrôleur  

    16. classe publique StudentController {  

    17.   

    18.     @Autowired  

    19.     Service étudiant privé StudentService ;  

    20.       

    21.     @RequestMapping("/student/save")  

    22.     public String saveStudent(Étudiant étudiant){  

    23.         String id = UUID.randomUUID().toString();  

    24.         System.out.println(id);  

    25.         étudiant.setId(id);  

    26.         studentService.save (étudiant);  

    27.         return "redirect:/student/find/all" ;  

    28.     }  

    29.       

    30.     @RequestMapping("/student/update")  

    31.     public String updateStudent(Étudiant étudiant){  

    32.         studentService.update (étudiant);  

    33.         return "redirect:/student/find/all" ;  

    34.     }  

    35.       

    36.     @RequestMapping("/student/to/save/form")  

    37.     public String toSaveStudentForm(){  

    38.         retourner "enregistrer" ;  

    39.     }  

    40.       

    41.     @RequestMapping("/student/delete")  

    42.     public String deleteStudent (@RequestParam("id") String id){  

    43.         studentService.delete(id);  

    44.         return "redirect:/student/find/all" ;  

    45.     }  

    46.       

    47.     @RequestMapping("/student/to/update/form")  

    48.     public String toUpdateStudentForm (@RequestParam("id") String id,Model model){  

    49.         Étudiant stu = studentService.find(id);  

    50.         model.addAttribute("stu", stu);  

    51.         renvoie "mise à jour" ;  

    52.     }  

    53.       

    54.     @RequestMapping("/student/find/all")  

    55.     public String findStudents(Model model){  

    56.         Liste<Étudiant> stuList = studentService.findAll();  

    57.         model.addAttribute("stuList", stuList);  

    58.         renvoie "liste" ;  

    59.     }  

    60. }  

    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:
    Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer