首页 > 数据库 >Redis的不同客户端对比

Redis的不同客户端对比

时间:2023-02-05 10:44:06浏览次数:63  
标签:Redis Lettuce Jedis 线程 客户端 对比 分布式

Redis 官方推荐的 Java 客户端有JedislettuceRedisson

客户端 简介 优点 缺点
Jedis 提供了比较全面的 Redis 操作 Jedis 简单全面, 支持 pipeline、事务等Redis高级特性 非线程安全的不支持异步
Lettuce 线程安全 多个线程就可以共享一个连接,性能高 学习使用成本高
Redisson 提供很多分布式相关操作 实现了分布式特性和可扩展的 Java 数据结构
线程安全且性能好
不支持Redis的一些高级特性

Jedis

Jedis 提供了比较全面的 Redis 命令的操作,也是目前使用最广泛的客户端。https://github.com/redis/jedis

优点如下:

  • Jedis 的 API 支持比较全面的 Redis 命令,Java 方法基本和 Redis 的 API 保持着一致,容易上手
  • 支持 pipeline、事务、Redis Sentinel、Redis Cluster等redis 提供的高级特性
  • 客户端轻量,简洁,便于集成和改造

缺点如下:

  • 使用阻塞的 I/O 操作,不支持异步
  • Jedis 在多线程环境下是非线程安全的,使用连接池以解决 Jedis 客户端实例存在的线程安全的问题
  • 不支持读写分离,需要自己实现

整体来说,Jedis 是一款经典的 Redis 客户端(java 语言方向),能满足绝大部分项目中的业务开发需求,虽然有些瑕疵,但是可以通过其它方式来弥补,可用性、安全性方面都有保证,总体评价是操作简单,易上手!

Lettuce

Lettuce 是一种可扩展的、线程安全的 Redis 高级客户端。

从 Spring Boot 2.x 开始, Lettuce 已取代 Jedis 成为SpringBoot 默认的 Redis 客户端https://lettuce.io/

优点如下:

  • 相比于 Jedis,Lettuce 属于后起之秀,对 Redis 更加全面,并且解决了 Jedis 客户端实例存在线程安全的问题
  • 支持同步编程,异步编程,响应式编程,自动重新连接,主从模式,集群模块,哨兵模式,管道和编码器等等高级的 Redis 特性
  • Lettuce 底层基于 Netty 框架的事件驱动与 redis 通信,采用了非阻塞的 I/O 操作,可异步调用,相比 Jedis,性能高
  • Lettuce 的 API 是线程安全的,如果不是执行阻塞和事务操作,如 BLPOP 和MULTI/EXEC 等命令,多个线程就可以共享一个连接,性能方面不会衰减

缺点如下:

  • API 学习使用成本高

Redisson

Redisson 是一个在 Redis 的功能基础上实现的客户端。实现了分布式和可扩展的 Java 数据结构,提供很多分布式相关操作服务,例如分布式锁,分布式集合,可通过 Redis 支持延迟队列。https://github.com/redisson/redisson

优点如下:

  • 实现了分布式特性和可扩展的 Java 数据结构,例如分布式锁,分布式集合,分布式对象,分布式远程调度等等高级功能,适合分布式开发
  • 与 Lettuce 一样,基于 Netty 框架的事件驱动与 redis 通信,支持异步调用,性能高
  • Redisson 的 API 是线程安全的,所以可以使用单个 Redisson 连接来完成各种操作。
  • 支持读写分离,支持读负载均衡,在主从复制和 Redis Cluster 架构下都可以使用
  • 内建 Tomcat Session Manager,为 Tomcat 6/7/8 提供了会话共享功能,可以与 Spring Session 集成,实现基于 Redis 的会话共享
  • 相比于 Jedis、Lettuce 等基于 redis 命令封装的客户端,Redisson 提供的功能更加高端和抽象,Redisson 可以类比 Spring 框架,这些框架搭建了应用程序的基础框架和功能,可以显著提升开发效率,让开发者有更多的时间来关注业务逻辑
  • 文档较丰富,有中文文档

缺点如下:

  • 和 Jedis、Lettuce 客户端相比,功能较为简单,对字符串的支持比较差,不支持排序、事务、管道、分区等 Redis 特性
  • API 更加抽象,学习使用成本高

小结

Jedis 和 Lettuce 是比较纯粹的 Redis 命令客户端,几乎没提供什么分布式操作服务。

Jedis 和 Lettuce 两者相比,Jedis 的性能比较差,其他方面并没有太明显的区别,所以如果你不需要使用 Redis 的高级功能的话,优先推荐使用 Lettuce。

相比于 Jedis、Lettuce 等基于 redis 命令封装的客户端,Redisson 提供的功能更加高端和抽象

Redisson 的优势是提供了很多开箱即用的 Redis 高级功能,如果你的应用中需要使用到 Redis 的高级功能,比如分布式锁,分布式对象,分布式会话共享等等,建议使用 Redisson。

  • 如果项目中对分布式功能的需求场景不多,优先推荐使用 Lettuce,基本上够用,使用 Jedis 也没问题,api 操作方面会更加简单。
  • 如果项目中除了对基本的数据缓存操作以外,还需要用到分布式锁,分布式对象,分布式集合等功能,优先推荐采用Lettuce +Redisson组合方式使用。

扩展

jedis的线程安全问题

在多线程共用同一个jedis实例时,会存在一些资源被其他线程重置导致当前线程无法获取到资源,从而出现程序异常;参考https://cloud.tencent.com/developer/article/1678172

参考原文链接

标签:Redis,Lettuce,Jedis,线程,客户端,对比,分布式
From: https://www.cnblogs.com/z-dk/p/17093000.html

相关文章

  • Forest – 开源的 Java HTTP 客户端框架
    什么是Forest?Forest是一个开源的JavaHTTP客户端框架,它能够将HTTP的所有请求信息(包括URL、Header以及Body等信息)绑定到您自定义的Interface方法上,能够通过调......
  • 通过matlab对比不同调制方式下的球形译码误码率仿真,包括BPSK,QPSK,8PSK,4QAM以及16QA
    1.算法描述 在BLAST检测中,目前采用的ZF(迫零)算法,MMSE(最小均方误差)算法,OSIC(排序连续干扰抵消)或ML(最大似然)准则来进行译码。前三种算法,实现起来较简单,但是......
  • Redis中的缓存穿透、雪崩、击穿的原因以及解决方案(详解)
    一、概述①缓存穿透:大量请求根本不存在的key(下文详解)②缓存雪崩:redis中大量key集体过期(下文详解)③缓存击穿:redis中一个热点key过期(大量用户访问该热点key,但是热点key......
  • redis基础
    redis在3.0以前使用的是单线程的Io模型3.0-6.0使用混合IO模型(混合:使用子线程处理redis内部请求,主线程处理客户端请求)6.0开始使用多线程IO模型提问:为什么使用多线程?因......
  • python中使用redis
    Redis的应用场景高速缓存-将不常变化但又经常被访问的热点数据放到Redis数据库中,可以大大降低关系型数据库的压力,从而提升系统的响应性能。排行榜-很多网站都有排......
  • Redis 缓存穿透、缓存雪崩、缓存击穿
    Redis缓存穿透、缓存雪崩、缓存击穿 上一篇压力测试、性能优化、jvm调优下一篇缓存数据一致问题解决方案本文作者:Little_Monster-lhq本文链接:https://www.cn......
  • P3基础篇-02.初识Redis-认识NoSQL
    Sql和NoSql的区别SQL(StructuredQueryLanguage):关系型数据库NoSql(NoStructuredQueryLanguage):非关系性数据库常见NoSql数据库:键值型数据库(Redis)文档型数据......
  • P4基础篇-03.初识Redis-认识Redis
    认识RedisRedis诞生于2009年,全称是RemoteDictionaryServer,远程字典服务器,是一个基于内存的键值型NoSql数据库。特征:键值(Key-Value)型,value支持多种不同数据结构,功能丰......
  • spring-data-redis-cnblog
    5.3SpringDataRedis5.3.1介绍SpringDataRedis是Spring的一部分,提供了在Spring应用中通过简单的配置就可以访问Redis服务,对Redis底层开发包进行了高度封装......
  • Docker第二章:Docker镜像、容器卷、单机tomcat、mysql、redis安装
    镜像一种轻量级、可执行的独立软件包,我们把应用程序和配置依赖打包形成一个可交付的运行环境(包括代码、运行时所需的库、环境变量和配置文件等),这个打包好的运行环境就是im......