Maison >base de données >Redis >Comment Java SpringBoot exploite-t-il Redis ?
spring Boot fournit un package de composants pour l'intégration de Redis : spring-boot-starter-data-redis, qui dépend de spring-data-redis et de lettuce.
De plus, il y a deux petits détails ici :
À l'ère Spring Boot 1.x, la couche inférieure de spring-data-redis utilisait Jedis ; à l'ère 2.x, elle a été remplacée par Lettuce.
Lettuce dépend de commons-pool2
<!-- springboot整合redis--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- 使用 lettuce 时要加这个包;使用 jedis 时则不需要。--> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> </dependency>
## Redis 服务器地址 spring.redis.host=localhost ## Redis 服务器连接端口 spring.redis.port=6379 ## Redis 数据库索引(默认为 0) spring.redis.database=0 ## 以下非必须,有默认值 ## Redis 服务器连接密码(默认为空) spring.redis.password= ## 连接池最大连接数(使用负值表示没有限制)默认 8 spring.redis.lettuce.pool.max-active=8 ## 连接池最大阻塞等待时间(使用负值表示没有限制)默认 -1 spring.redis.lettuce.pool.max-wait=-1 ## 连接池中的最大空闲连接 默认 8 spring.redis.lett uce.pool.max-idle=8 ## 连接池中的最小空闲连接 默认 0 spring.redis.lettuce.pool.min-idle=0
Dans ce test unitaire, nous utilisons redisTemplate pour stocker une chaîne "Hello Redis"
.
Spring Data Redis a reclassé et encapsulé l'API, encapsulant le même type d'opérations dans l'interface Operation :
Opération propriétaire | Description |
---|---|
ValueOperations | Opérations de données de type chaîne |
ListeOpérations Opération de données de type liste | 4, RedisTemplate et StringRedisTemplate |
Mais évidemment, cela est contraire à la situation réelle de Redis : au plus petit niveau d'unité de stockage, Redis ne peut essentiellement stocker que des chaînes et ne peut pas stocker d'autres types. De ce point de vue, StringRedisTemplate correspond davantage à la nature de stockage de Redis. Comment RedisTemplate prend-il en charge n'importe quel type en sérialisant les valeurs ? | Lorsque vous utilisez RedisTemplate pour stocker des objets, l'adresse de l'objet sera enregistrée pour la désérialisation, ce qui gaspillera grandement de l'espace de stockage. Pour résoudre ce problème, utilisez StringRedisTemplate, en pensant que vous souhaitez sérialiser et désérialiser manuellement |
5. SpringBoot exploite la chaîne de caractères | a, l'expiration de la clé |
Unités de temps Redis couramment utilisées | MINUTES |
DAYS
: jours//给user对象设置10分钟过期时间 redisTemplate.opsForValue().set("user:1", JSON.toJSONString(users),10,TimeUnit.MINUTES );b, supprimer des données
//删除键 redisTemplate.delete(key); //判断键是否存在 boolean exists = redisTemplate.hasKey(key);6, opération SpringBoot Hash (hash)
@Test public void testHash() { String key = "tom"; HashOperations<String, Object, Object> operations = redisTemplate.opsForHash(); operations.put(key, "name", "tom"); operations.put(key, "age", "20"); String value= (String) operations.get(key,"name"); System.out.println(value); }
/** * 测试List * leftPush 将数据添加到key对应的现有数据的左边,也就是头部 * leftPop 取队列最左边数据(从数据库移除) * rightPush 将数据添加到key对应的现有数据的右边,也就是尾部 */ @Test public void testList() { final String key = "list"; ListOperations<String,Object> list = redisTemplate.opsForList(); list.leftPush(key, "hello"); list.leftPush(key, "world"); list.leftPush(key, "goodbye"); Object mete = list.leftPop("list"); System.out.println("删除的元素是:"+mete); //删除 goodbye String value = (String) list.leftPop(key); System.out.println(value.toString()); // range(key, 0, 2) 从下标0开始找,找到2下标 List<Object> values = list.range(key, 0, 2); for (Object v : values) { System.out.println("list range :" + v); } } }Redis List est implémenté sous la forme d'une liste chaînée bidirectionnelle, qui peut prendre en charge la recherche inversée et le parcours, ce qui la rend plus pratique à utiliser. Cependant, elle entraîne une surcharge de mémoire supplémentaire dans Redis, y compris les files d'attente de tampon d'envoi, etc. ., utilisation également de cette structure de données. 8. SpringBoot fonctionne sur le type de collection Set
Les fonctions externes fournies par Redis Set sont similaires à List. La particularité est que Set peut automatiquement dédupliquer les données d'une liste, mais vous le faites. ne pas vouloir Set est un bon choix lorsque des données en double se produisent, et Set fournit une interface importante pour déterminer si un membre fait partie d'une collection Set, ce que List ne peut pas fournir.
/** * 测试Set */ @Test public void testSet() { final String key = "set"; SetOperations<String,Object> set = redisTemplate.opsForSet(); set.add(key, "hello"); set.add(key, "world"); set.add(key, "world"); set.add(key, "goodbye"); Set<Object> values = set.members(key); for (Object v : values) { System.out.println("set value :" + v); } Boolean exist = set.isMember(key,"hello") //判断是否存在某个元素 operations.move("set", "hello", "setcopy"); //把set集合中的hello元素放到setcopy 中 } }9. SpringBoot exploite le type de collection ZSet
Redis Le scénario d'utilisation de ZSet est similaire à Set. La différence est que Set n'est pas automatiquement ordonné, tandis que ZSet peut trier les membres en fournissant un paramètre de priorité supplémentaire (Score) par l'utilisateur. . Et c'est l'ordre d'insertion, c'est-à-dire le tri automatique.
/** * 测试ZSet * range(key, 0, 3) 从开始下标到结束下标,score从小到大排序 * reverseRange score从大到小排序 * rangeByScore(key, 0, 3); 返回Score在0至3之间的数据 */ @Test public void testZset() { final String key = "lz"; ZSetOperations<String,Object> zset = redisTemplate.opsForZSet(); zset.add(key, "hello", 1); zset.add(key, "world", 6); zset.add(key, "good", 4); zset.add(key, "bye", 3); Set<Object> zsets = zset.range(key, 0, 3); for (Object v : zsets) { System.out.println("zset-A value :"+v); } System.out.println("======="); Set<Object> zsetB = zset.rangeByScore(key, 0, 3); for (Object v : zsetB) { System.out.println("zset-B value :"+v); } } }
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!