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。