[Redis 客户端整合] Java 中常用Redis客户端比较

一、简介

Redis常用客户端主要有三个:

在Spring boot2之后, 对redis连接的支持, 默认就采用了lettuce

二、概念

  • Jedis : 是老牌的Redis的Java实现客户端, 提供了比较全面的Redis命令的支持
  • redisson : 实现了分布式和可扩展的Java数据结构
  • Lettuce : 高级Redis客户端, 用于线程安全同步, 异步和响应使用, 支持集群, sentinel, 管道和编码器

三、优点

  • Jedis : 比较全面的提供了Redis的操作特性
  • Redisson : 促使使用者对Redis的关注分离, 提供很多分布式相关操作事务, 例如: 分布式锁, 分布式集合, 可通过Redis支持延迟队列
  • Lettuce : 基于Netty框架的事件驱动的通信层, 其方法调用是异步的。Lettuce的API是线程安全的, 所以可以操作单个Lettuce连接来完成各种操作

四、可伸缩

  • Jedis : 使用阻塞的I/O, 并且方法调用都是同步的, 程序流需要等到sockets处理完I/O才能执行, 不支持异步。Jedis客户端实例不是线程安全的, 所以需要通过连接池来使用Jedis
  • Redisson : 基于Netty框架的事件驱动的通信层, 其方法调用是异步的。Redisson的API是线程安全的, 所以可以操作单个Redisson连接来完成各种操作
  • Lettuce : 基于Netty框架的事件驱动的通信层, 其方法调用是异步的。Lettuce的API是线程安全的, 所以可以操作单个Lettuce连接来完成各种操作。Lettuce能够支持redis4, 需要java8及以上。Lettuce是基于Netty实现的与Redis进行同步和异步操作

五、比较

  • Jedis :直接连接Redis Server, 非线程安全, 需使用连接池为每个Jedis实例增加物理连接

  • Redisson : 基于Netty连接Redis Server, 线程安全, 功能较为简单, 不支持字符串操作, 不支持排序、事务、管道、分区等Redis特性。促使使用者对Redis的关注分离,提供很多分布式相关操作事务

  • Lettuce : 基于Netty连接Redis Server, 线程安全, 一个连接实例可以满足多线程环境下的并发访问, 一个连接实例不够的情况下, 可以按需增加连接实例

六、总结

优先使用Lettuce, 如果需要分布式锁, 分布式集合等分布式的高级特性, 添加Redisson结合使用, 因为Redisson对字符串操作的支持很差

posted @ 2024-11-21 08:00  DavidH  阅读(9)  评论(0编辑  收藏  举报