Java的Redis客户端选择-jedis与Lettuce

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。

原文地址:https://www.cnblogs.com/mzc1997/p/14367903.html