Table des matières
1. Installation et démarrage de Redis
2. Hachage de hachage (emphase)
4. L'utilisation de base (compréhension) de Jedis est équivalente à JDBC
5. Spring Data Redis (emphase *****)
Manipuler les données de type hachage
Manipulation des données de type liste
Données de type de collecte d'opérations (étendues)
Exploiter les données de type collection ordonnée (étendu)
Fonctionnement général (doit maîtriser)
1. Notions de base :
1. Présentation de Redis :
Redis est une base de données basée sur la clé mémoire = structure de valeur
Numéro de port : 6379
2. Caractéristiques principales :
1. Stockage en mémoire, performances de lecture et d'écriture élevées - La vitesse de lecture Redis est de 110 000 fois/s
2. Il stocke des types de valeur riches (5 types de données), également appelés base de données structuréeNoSQL
3. Convient pour stocker des données à chaud et qui ne changent pas tout le temps (marchandises, informations, actualités)
3. Introduction à NoSQL
NoSQL (Not Only SQL) n'est pas seulement SQL, se réfère généralement à == base de données non relationnelle ==
Base de données relationnelle (Mysql, Oracle, etc.)
avantage:
1. Facile à entretenir : tous utilisent une structure de table et un format uniforme
2. Facile à utiliser : le langage SQL est universel
3. Requête multi-tables : peut être utilisée pour des requêtes très complexes entre une table ou plusieurs tables
défaut:
1. Stocké sur le disque dur, la capacité de lecture et d'écriture est donc relativement faible
2. Structure de table fixe, faible flexibilité
3. Exigences élevées en matière de lecture et d'écriture simultanées, les E/S du disque dur constituent un gros goulot d'étranglement
Bases de données non relationnelles (redis, MongoDB, etc.)
avantage:
1. Format flexible : le format des données stockées peut être une clé, une valeur et d'autres scénarios d'application.
2. Vitesse rapide : nosql peut utiliser le disque dur ou la mémoire comme support au lieu du disque dur ;
3. Faible coût : le déploiement de la base de données nosql est simple, fondamentalement gratuit ;
défaut:
1. Il ne fournit pas de support SQL et le coût d'apprentissage et d'utilisation est relativement élevé.
2. Généralement pas de traitement des transactions
3. Absence de requête complexe
1. Installation et démarrage de Redis
télécharger
Adresse du site officiel de Reids : Redis
Adresse du site Web chinois : site Web chinois Redis
Structure du répertoire
répertoire ou fichier | effet |
---|---|
redis-benchmark | outils de test de performances |
redis-check-aof | Outil de réparation de fichiers AOF |
redis-check-dump | Outil de vérification de fichier RDB (fichier persistant d'instantané) |
redis-cli | client en ligne de commande |
serveur redis | Démarrer le serveur redis |
redis.windows.conf | fichier de configuration principal redis |
Démarrez le service :
Lancez la ligne de commande :
3. Commande Redis (emphase)
Structure de données Redis
Redis utilise le stockage de paires clé-valeur. Le type de clé (clé) ne peut être qu'une chaîne, et la valeur (valeur) prend en charge cinq types de données :
Chaîne : Chaîne
Hachage : HashMap
Liste doublement liée : LinkedList
Collection non ordonnée : HashSet
Collection ordonnée : LinkedHashSet
1.String chaîne (emphase)
Le type de chaîne est le type de stockage de données le plus basique dans Redis
* Ajout de la valeur de la clé définie
* Requête pour obtenir la clé* Supprimer la clé de suppression
* Définir le délai d'expiration lors de l'ajout (code de vérification) de la deuxième valeur de la clé setex
* Vérifier le temps restant clé ttl
* Déterminer si l'enregistrement existe selon la clé existe clé 0 : n'existe pas 1 : existe
2. Hachage de hachage (emphase)
Le type Hash est très similaire à Map en java, où un groupe de paires clé-valeur peut être stocké dans la valeur
Ce type est très approprié pour stocker des informations sur des objets en Java
* Ajouter la clé hset hkey hvalue
* Interroger toutes les clés hgetall
une seule clé hget hkey * Supprimer
Supprimer une clé à valeur unique hdel key hkey
delete redis key del key
* get all hkey hkeys key
* get all hvalue hvals key
* Ajouter la valeur de la touche
push gauche push push droite la valeur de la touche push * longueur de la liste clé llen * élément de requête clé lrange [index de début index de fin] 0 -1
* Supprimer l'élément
gauche popup
touche lpop
droite popup
touche rpop
3.Ensemble de collecte
La couche inférieure du type Set est une table de hachage. Les éléments à l'intérieur sont désordonnés et non répétables
* Ajouter
la valeur de la clé sadd
* Interroger le nombre de
clés de récupération de la collection
* Interroger
la clé smembers de l'élément
* Supprimer
la valeur de la clé srem de l'élément
4. Collection ZSet
Zset, également connu sous le nom de sortedSet, ajoute une fonction ordonnée sur la base de Set. Lors de l'ajout d'éléments, il est permis de spécifier un score, et il sera trié en fonction de ce score.
* Ajout
de la valeur du score de la clé zadd
* Interroger la clé zrange
croissante
[index de début index de fin] [withscores] clé zrevrange
décroissante
[index de début index de fin] [withscores]* supprimer
la valeur de la clé zrem
commande commune
* Clés de requête floues
** supprimer la clé
de la clé....* Déterminez la
clé de type de type de valeur en fonction de la clé* Sélectionnez la base de données
sélectionnez 0 ~ 15* Effacer la base de données actuelle
flushdb* Vider toutes les bases de données
flushall
4. L'utilisation de base (compréhension) de Jedis est équivalente à JDBC
Redis existe en tant qu'excellent serveur de cache. La plupart des langages fournissent des packages de pilotes pour se connecter à Redis. En java, les plus connus sont Jedis et Redisson. Aujourd'hui, nous prendrons Jedis comme exemple pour apprendre à utiliser des programmes pour faire fonctionner redis.
API Jedis
méthode | expliquer |
---|---|
nouveau Jedis (hôte, port) | Créez un objet jedis, le paramètre host est l'adresse du serveur redis et le paramètre port est le port du service redis |
ensemble (clé, valeur) | Définir les données de type chaîne |
Obtenir la clé) | Obtenir des données de type chaîne |
hset(clé,champ,valeur) | Définir les données du type de hachage |
hget(clé,champ) | Obtenir des données de type hachage |
lpush(clé,valeurs) | Définir les données de type liste |
lpop(clé) | Pop la pile sur le côté gauche de la liste |
rpop (clé) | Pop la pile sur le côté droit de la liste |
sup (clé) | supprimer la clé spécifiée |
<dependencies>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.3</version>
</dependency>
</dependencies>
public static void main(String[] args) {
// 1.创建连接
Jedis jedis = new Jedis("127.0.0.1", 6379);
// 2.新增
jedis.set("1002", "李四");
//3.查询
String value = jedis.get("1002");
System.out.println(value);
// 4.关闭连接
jedis.close();
}
Pool de connexion Jedis
public static void main(String[] args) {
// 0.创建连接池配置对象
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(50); // 最大连接数
config.setMaxIdle(20); // 最大空闲数
// 1.创建连接池
JedisPool jedisPool = new JedisPool(config,"127.0.0.1",6379);
// 2.获取连接
Jedis jedis = jedisPool.getResource();
// 3.进行 新增、修改、删除、查询
// 4.归还连接
jedis.close();
}
5. Spring Data Redis (emphase *****)
introduire:
Spring Data Redis facilite la configuration et l'accès à Redis à partir des applications Spring
En RedisTemplate
encapsulant fortement les Jedis sous-jacents, il fournit diverses opérations de redis
-
ValueOperations : opération de paire clé-valeur simple Chaîne
-
SetOperations : ensemble d'opérations de données de type ensemble
-
ZSetOperations : opération de données de type zset ensemble trié---->zset
-
HashOperations : hachage pour les opérations de données de type hachage
-
ListOperations : exploite la liste pour les données de type liste
Construction de l'environnement
1. Dépendance
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.5</version>
</parent>
<dependencies>
<!-- SpringDataRedis框架-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- spring测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
2. Fichier de configuration
spring:
redis:
host: localhost
port: 6379
database: 0 # 操作的是0号数据库
jedis: #Redis连接池配置
pool:
max-active: 8 #最大连接数
max-wait: 1ms #连接池最大阻塞等待时间
max-idle: 4 #连接池中的最大空闲连接
min-idle: 0 #连接池中的最小空闲连接
3.API
@Autowired
private RedisTemplate redisTemplate;//二进制(能取,在可视化工具中看不到数据)
@Autowired
private StringRedisTemplate stringRedisTemplate;//RedisTemplate 的子类
3.1 Valeur de fonctionnement
// 操作字符串类型
@Test
public void test01() throws Exception {
// 获取string操作对象
ValueOperations<String, String> opsForValue = stringRedisTemplate.opsForValue();
// 存值
opsForValue.set("city", "北京");
// 取值
String value = opsForValue.get("city");
System.out.println(value);
// 存验证码存活5分钟
opsForValue.set("sms_13700137000", "6375",TimeUnit.SECONDS);
//删除
redisTemplate.delete("city");
}
Manipuler les données de type hachage
// 操作hash类型
@Test
public void test02() throws Exception {
// 获取hash操作对象
HashOperations<String, Object, Object> opsForHash = stringRedisTemplate.opsForHash();
// 存值
//opsForHash.put("1005", "nage", "zhangsan");
//opsForHash.put("1005", "age", "18");
//opsForHash.put("1005", "sex", "man");
// 取出年龄
String age = (String) opsForHash.get("1005", "age");
System.out.println(age);
System.out.println("---------------");
// 取出所有key
Set<Object> keys = opsForHash.keys("1005");
for (Object key : keys) {
System.out.println(key);
if("sex".equals(key)){
ops.delete("1005",key); //删除map中的key
}
}
System.out.println("---------------");
// 取出所有value
List<Object> values = opsForHash.values("1005");
for (Object value : values) {
System.out.println(value);
}
// 删除
stringRedisTemplate.delete("1005");
}
Manipulation des données de type liste
// 操作list类型
@Test
public void test03() throws Exception {
// 获取list操作对象
ListOperations<String, String> opsForList = stringRedisTemplate.opsForList();
// 存值
//opsForList.leftPush("alist", "a");
//opsForList.leftPush("alist", "b");
opsForList.leftPushAll("alist", "a", "b");
opsForList.rightPush("alist", "c");
// 取值
List<String> list = opsForList.range("alist", 0, -1);
for (String s : list) {
System.out.println(s);
}
System.out.println("--------------");
// 获取list长度
Long size = opsForList.size("alist");
System.out.println(size);
System.out.println("--------------");
// 遍历删除
for (Long i = 0l; i < size; i++) {
// 弹出
System.out.println(opsForList.rightPop("alist"));
}
}
Données de type de collecte d'opérations (étendues)
// 操作set类型
@Test
public void test04() throws Exception {
// 获取set操作对象
SetOperations<String, String> opsForSet = stringRedisTemplate.opsForSet();
// 存值
// opsForSet.add("lol", "a", "b", "c", "a");
// 获取
Set<String> lol = opsForSet.members("lol");
for (String s : lol) {
System.out.println(s);
}
// 删除
opsForSet.remove("lol", "a");
}
Exploiter les données de type collection ordonnée (étendu)
// 操作zset类型
@Test
public void test05() throws Exception {
// 获取 zset操作对象
ZSetOperations<String, String> opsForZSet = stringRedisTemplate.opsForZSet();
// 存值
// opsForZSet.add("wangzhe", "安其拉", 66.6);
// opsForZSet.add("wangzhe", "兰陵王", 68.6);
// opsForZSet.add("wangzhe", "后羿", 79.6);
// 修改
// opsForZSet.add("wangzhe", "安其拉", 85.6);
// 删除
opsForZSet.remove("wangzhe", "兰陵王");
// 取值
Set<String> wangzhe = opsForZSet.reverseRange("wangzhe", 0, -1);
for (String s : wangzhe) {
System.out.println(s);
}
}
Fonctionnement général (doit maîtriser)
// 通用操作
@Test
public void test06()throws Exception{
// 查询所有key
Set<String> keys = stringRedisTemplate.keys("*");
for (String key : keys) {
System.out.println(key);
}
// 判断某个key是否存在
Boolean itheima = stringRedisTemplate.hasKey("1005");
System.out.println(itheima);
// 判断某个key的类型
DataType type = stringRedisTemplate.type("1005");
System.out.println(type.name());
}