第八章:集成Redis连接客户端及连接池Lettuce
本系列博客旨在搭建一套能用于实际开发使用的spring cloud多模块微服务项目框架,并不是一个spring cloud的demo而已,提供系统的开发规范限制,微服务注册中心,配置中心,负载均衡,熔断,redis缓存,分布式事务,kafka服务消息通信,系统安全(sql注入攻击,xxs攻击等等),多数据源切换,全局异常处理等等。
目录顺风车:
spring cloud多模块项目框架搭建:https://blog.csdn.net/lingyancangqiong/article/details/109841353
redis官网:Redis / redis中文官方网站
redis基础教程:https://www.runoob.com/redis/redis-tutorial.html
Lettuce官网:https://lettuce.io/
Lettuce开源项目及文档:https://github.com/lettuce-io/lettuce-core
redis大家都很熟悉,现在几乎没有人没用过redis,一问什么是redis?大多数人的回答就是内存数据库嘛。还有呢,就说不出来了。rdedis是redis 之父 Salvatore Sanfilippo,一位意大利的大神,2009年开始开发并开源的,基于内存的NOSQL非关系型数据库,开发之初redis只是这位大神一个副业项目的一部分。什么是redis,怎样使用redis,都不在本章的讲解范围之内,我们是在搭系统架构🤣🤣,不会的或者没用过童鞋可以看看文首的基础教程。
一. 什么是Lettuce??
Lettuce翻译过来就是生菜,logo也挺像的,也是redis提供的众多Java 连接客户端之一。
二 . Lettuce和Jedis的区别?
1. Jedis 和 Lettuce 都是 Java 操作 Redis 的客户端。在 Spring Boot 1.x 版本默认使用的是 jedis ,而在 Spring Boot 2.x 版本默认使用的就是Lettuce。
2. Jedis 在实现上是直连 redis server,多线程环境下非线程安全,除非使用连接池,为每个 redis实例增加 物理连接。
3. Lettuce 是 一种可伸缩,线程安全,完全非阻塞的Redis客户端,多个线程可以共享一个RedisConnection,它利用Netty NIO 框架来高效地管理多个连接,从而提供了异步和同步数据访问方式,用于构建非阻塞的反应性应用程序,一个连接实例不够的情况也可以按需增加连接实例。
4. Lettuce 需要借助commons-pool2连接池,客户端连接 Redis 使用的是 TCP协议,直连的方式每次需要建立 TCP连接,而连接池的方式是可以预先初始化好客户端连接,所以每次只需要从 连接池借用即可,而借用和归还操作是在本地进行的,只有少量的并发同步开销,远远小于新建TCP连接的开销。另外,直连的方式无法限制 redis客户端对象的个数,在极端情况下可能会造成连接泄漏,而连接池的形式可以有效的保护和控制资源的使用,减少了创建。连接池在《spring cloud多模块项目框架搭建-集成druid连接池》就说过,原理都是一样的。
所以Lettuce在连接性能更胜一筹,但是提供的接口单一。而Jedis也不是一无是处,Jedis提供了比较全面的 Redis 操作特性的 API,API 基本与 Redis 的指令一一对应,使用简单易理解。还是那句话,技术没有老旧,好坏之分,适合自己,适合业务场景的就是好技术。
三. 集成 Redis单机版Lettuce 连接客户端
本章还是以dream-order系统为例,自己动手完成dream-activity.在上一章《spring cloud多模块项目框架搭建-集成SLF4J和log4j日志组件》的代码基础上进行集成。
1. 在dream父模块的pom.xml引入Lettuce 和commons-pool2的依赖。
<properties>
<spring-boot-starter-data-redis.version>2.4.0</spring-boot-starter-data-redis.version>
<commons-pool2.version>2.9.0</commons-pool2.version>
</properties>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>${spring-boot-starter-data-redis.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-pool2 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>${commons-pool2.version}</version>
</dependency>
2. 在dream-order的pom.xml加入如下依赖
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-star