Loading...

别再搞混了!Redis、Jedis、Lettuce、Spring Data Redis、Redisson、Spring Session Redis 一次讲透

阅读 ...

平时做Java开发,只要引入Redis做缓存,pom.xml里总会看到一堆名字相似的东西:一会儿是jedis,一会儿是lettuce,还有Spring Data Redis、Redisson、Spring Session Redis……

刚接触的时候真的头大,甚至会把Redis服务端和Java客户端混为一谈,踩了不少坑。

今天就把这些东西理清楚,分清谁是底层、谁是封装、谁是专门解决某个场景的。

其实,这些东西根本不是平级的,而是有明确的上下层级依赖关系,从底层到上层的完整链路是:

画板

先讲清每个东西的定位:

  1. Redis

就是你装在服务器上的NoSQL数据库(服务端),所有东西最终都要和它打交道。

  1. Jedis、Lettuce、Redisson

都是Java连接Redis服务端的客户端,只是定位和特性不同。

  1. Spring Data Redis

Spring对Java客户端做的统一封装,屏蔽底层差异,让你用一套API就能操作Redis。

  1. Spring Session Redis

基于Spring Data Redis做的专项场景组件,只干1件事:解决分布式系统的Session共享问题。

Redis 本身

首先,所有东西的核心,就是Redis——它是一个独立跑在服务器上的键值对NoSQL数据库,也就是我们常说的Redis服务端。

它完全独立于Java程序,你用Java、Python、Go都能连接它,和jedis这些Java客户端没有任何强绑定,作用就是提供数据存储、缓存、发布订阅、计数器这些能力。

Java客户端:Jedis、Lettuce、Redisson

这三个都是Java语言实现的Redis客户端,作用就是让Java程序通过TCP连接Redis服务端、发送命令、接收结果,项目里选其一即可,不用全引。

1. Jedis

Jedis应该是Java生态里最早流行的Redis客户端了,最大的特点就是轻量、简单,API完全贴合Redis的原生命令。

它的底层是阻塞式、直连模型

每个连接对应一个物理TCP连接,多线程环境下是线程不安全的,所以多线程场景用的时候,必须搭配连接池使用。

适用场景

小项目、简单的Redis缓存场景,对性能没有极致要求,就想快速上手用Redis,选Jedis完全够用。

小贴士

Spring Boot 1.x版本,Spring Data Redis默认的客户端就是Jedis,2.x之后换成了Lettuce。

2. Lettuce

现在用Spring Boot 2.x/3.x,只要引了redis的starter,默认集成的就是Lettuce,它是基于Netty实现的非阻塞、响应式客户端

和Jedis最大的区别就是:

它是线程安全的,一个连接实例就能在多线程环境下安全使用,不用额外配置连接池;

底层用Netty的NIO模型,支持异步、响应式编程,高并发场景下的性能比Jedis好很多,同时也完美支持Redis哨兵、集群、管道这些高级特性。

适用场景

高并发、需要异步操作Redis的场景,还有Spring WebFlux响应式编程项目。

Redisson

Jedis和Lettuce的核心是:

封装Redis命令,让你能操作Redis。

而Redisson是基于Redis,实现了大量分布式系统的高级功能,是一个更重量级的客户端。

Redisson底层也是基于Netty实现的非阻塞模型。

它的优势是提供了一整套贴合Java并发编程API的分布式工具:

比如业内最常用的分布式锁(可重入锁、公平锁)、分布式信号量、分布式队列、分布式Map/List,甚至还有分布式限流、分布式ID生成这些功能。

适用场景

项目里需要用分布式锁、分布式队列这些高级分布式功能的时候,首选Redisson。

Spring Data Redis

Spring Data Redis本身不具备连接Redis的能力,它只是对底层的Java客户端做了一层统一封装,是Spring Data家族的一员,专门用来在Spring/Spring Boot项目里简化Redis操作,作用就是:

屏蔽Jedis、Lettuce这些不同客户端的底层API差异,给你提供了一套统一的操作API——就是我们最常用的RedisTemplate、StringRedisTemplate。

它和客户端的关系

Spring Data Redis是上层封装,Jedis/Lettuce/Redisson是底层实现,必须选一个底层客户端,它才能正常工作。

适用场景

只要是Spring/Spring Boot项目,用Redis就必用Spring Data Redis,这是Spring生态里操作Redis的标准方式,能极大简化代码,不用关心底层客户端的细节。

Spring Session Redis

这个就更上层了,很多人会把它和Spring Data Redis混为一谈,其实它俩根本不是一个维度的东西:

Spring Data Redis是通用的Redis操作封装,而Spring Session Redis只干分布式Session共享这一件事。

传统单体项目里,Session是存在Tomcat容器里的,但是分布式微服务项目里,一个用户的请求可能会打到不同的服务节点上,A节点存的用户登录Session,B节点根本拿不到,就会出现用户登录了一次,刷新一下就需要重新登录的问题。

最常用的解决方案,就是把Session统一存在Redis里,所有服务节点都从Redis里读写Session,就能实现跨节点的Session共享了。

而Spring Session Redis,就是把“Session存Redis、从Redis取Session、过期时间管理、销毁”这一整套逻辑,完全给你封装好了。

你不用写任何业务代码,只要引入依赖、加几行简单配置,就能实现分布式Session共享,而且对业务代码完全无侵入。

适用场景

分布式微服务项目里,需要实现跨节点的Session共享、单点登录,用它非常方便,几行配置就能搞定,不用自己手写逻辑。

本文由 iamxurulin 原创发布,转载请保留原文链接。
最后更新于 2026-08-23 17:21:42
关于作者与文章

本文为 iamxurulin 原创技术文章。如对内容有疑问或建议,欢迎在评论区交流讨论。

Coder_Studio - 记录后端开发、算法与 AI 的成长之路