Lettuce 和 Jedis 的定位都是Redis的client,所以他们当然可以直接连接redis server。
Jedis在实现上是直接连接的redis server,如果在多线程环境下是非线程安全的,这个时候只有使用连接池,为每个Jedis实例增加物理连接
Lettuce的连接是基于Netty的,连接实例(StatefulRedisConnection)可以在多个线程间并发访问,应为StatefulRedisConnection是线程安全的,所以一个连接实例(StatefulRedisConnection)就可以满足多线程环境下的并发访问,当然这个也是可伸缩的设计,一个连接实例不够的情况也可以按需增加连接实例。
从springboot2.0开始已经默认使用Luttuce,但仍然提供两种客户端供使用。
另外提一下配置
从spring-boot-starter-redis 1.4.7.RELEASE是该依赖的最后一个版本,迁移到spring-boot-starter-data-redis
在springboot1.4.7之前的版本配置客户端连接池如下:
spring:
redis:
pool:
maxActive: 5000
maxIdle: 30
minIdle: 5
max-wait: 2000
在1.4.7版本之后如果扔使用以上配置会提示你:Deprecated configuration property 'spring.redis.pool.max-active' ,即使配了也是失效配置。在RedisProperties(springboot autoconfig jar包)新增了Jedis和Lettuce内部类用来配置客户端连接池,如下
Jedis可替换为Lettuce
spring:
redis:
jedis:
pool:
maxActive: 5000
maxIdle: 30
minIdle: 5
max-wait: 2000
至于客户端的选择,建议Lettuce。