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 :
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
base de données.properties redis.maxIdle=10
redis.maxActive=20
redis.maxWait=10000
redis.testOnBorrow=true
redis.host=192.168.1.76
redis.port=6379
redis.pass=password1 sdr提供了4种内置的sérialiseur:
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
importer com.npf.dao.StudentDao ;
importer com.npf.model.Student ;
@Dépôt
classe publique StudentDaoImpl implémente StudentDao{
@Autowired
privé RedisTemplate
@Resource(name="redisTemplate")
private HashOperations
public static final String STUDENT = "étudiant" ;
@Override
public void save(Étudiant étudiant) {
opsForHash.put(ÉTUDIANT, étudiant.getId(), étudiant);
}
@Override
public Student find(String id) {
Étudiant étudiant = opsForHash.get(ÉTUDIANT, id);
revenir étudiant ;
}
@Override
public void delete (String id) {
opsForHash.delete(ÉTUDIANT, identifiant);
}
@Override
mise à jour publique (Étudiant étudiant) {
opsForHash.put(ÉTUDIANT, étudiant.getId(), étudiant);
}
@Override
liste publique<Étudiant> findAll() {
Carte
Liste<Étudiant> stuList = new ArrayList
for(Entry
stuList.add(entry.getValue());
}
renvoyer stuList ;
}
}
控制层代码如下:
package com.npf.controller ;
importer java.util.List ;
importer java.util.UUID ;
importer org.springframework.beans.factory.annotation.Autowired ;
importer org.springframework.stereotype.Controller ;
importer org.springframework.ui.Model ;
importer org.springframework.web.bind.annotation.RequestMapping ;
importer org.springframework.web.bind.annotation.RequestParam ;
importer com.npf.model.Student ;
importer com.npf.service.StudentService ;
@Contrôleur
classe publique StudentController {
@Autowired
Service étudiant privé StudentService ;
@RequestMapping("/student/save")
public String saveStudent(Étudiant étudiant){
String id = UUID.randomUUID().toString();
System.out.println(id);
étudiant.setId(id);
studentService.save (étudiant);
return "redirect:/student/find/all" ;
}
@RequestMapping("/student/update")
public String updateStudent(Étudiant étudiant){
studentService.update (étudiant);
return "redirect:/student/find/all" ;
}
@RequestMapping("/student/to/save/form")
public String toSaveStudentForm(){
retourner "enregistrer" ;
}
@RequestMapping("/student/delete")
public String deleteStudent (@RequestParam("id") String id){
studentService.delete(id);
return "redirect:/student/find/all" ;
}
@RequestMapping("/student/to/update/form")
public String toUpdateStudentForm (@RequestParam("id") String id,Model model){
Étudiant stu = studentService.find(id);
model.addAttribute("stu", stu);
renvoie "mise à jour" ;
}
@RequestMapping("/student/find/all")
public String findStudents(Model model){
Liste<Étudiant> stuList = studentService.findAll();
model.addAttribute("stuList", stuList);
renvoie "liste" ;
}
}
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!