Java Redis三种客户端对比(优缺点对比+使用建议)

2023-10-31

Redis的Java客户端很多,官方推荐的有三种:Jedis、Redisson和lettuce。

在这里对Jedis和Redisson进行对比介绍

Jedis:

轻量,简洁,便于集成和改造
支持连接池
支持pipelining、事务、LUA Scripting、Redis Sentinel、Redis Cluster
不支持读写分离,需要自己实现
文档差(真的很差,几乎没有……)
Redisson:

基于Netty实现,采用非阻塞IO,性能高
支持异步请求
支持连接池
支持pipelining、LUA Scripting、Redis Sentinel、Redis Cluster
不支持事务,官方建议以LUA Scripting代替事务
支持在Redis Cluster架构下使用pipelining
支持读写分离,支持读负载均衡,在主从复制和Redis Cluster架构下都可以使用
内建Tomcat Session Manager,为Tomcat 6/7/8提供了会话共享功能
可以与Spring Session集成,实现基于Redis的会话共享
文档较丰富,有中文文档
对于Jedis和Redisson的选择,同样应遵循前述的原理,尽管Jedis比起Redisson有各种各样的不足,但也应该在需要使用Redisson的高级特性时再选用Redisson,避免造成不必要的程序复杂度提升。
————————————————
版权声明:本文为CSDN博主「moonpure」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/moonpure/article/details/82659460

  1. Jedis

Jedis 是老牌的 Redis 的 Java 实现客户端,提供了比较全面的 Redis 命令的支持,其官方网址是:http://tool.oschina.net/uploads/apidocs/redis/clients/jedis/Jedis.html。

优点:

支持全面的 Redis 操作特性(可以理解为API比较全面)。
缺点:

使用阻塞的 I/O,且其方法调用都是同步的,程序流需要等到 sockets 处理完 I/O 才能执行,不支持异步;
Jedis 客户端实例不是线程安全的,所以需要通过连接池来使用 Jedis。
2. lettuce

lettuce ([ˈletɪs]),是一种可扩展的线程安全的 Redis 客户端,支持异步模式。如果避免阻塞和事务操作,如BLPOP和MULTI/EXEC,多个线程就可以共享一个连接。lettuce 底层基于 Netty,支持高级的 Redis 特性,比如哨兵,集群,管道,自动重新连接和Redis数据模型。lettuce 的官网地址是:https://lettuce.io/

优点:

支持同步异步通信模式;
Lettuce 的 API 是线程安全的,如果不是执行阻塞和事务操作,如BLPOP和MULTI/EXEC,多个线程就可以共享一个连接。
3. Redisson

Redisson 是一个在 Redis 的基础上实现的 Java 驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的 Java 常用对象,还提供了许多分布式服务。其中包括( BitSet, Set, Multimap, SortedSet, Map, List, Queue, BlockingQueue, Deque, BlockingDeque, Semaphore, Lock, AtomicLong, CountDownLatch, Publish / Subscribe, Bloom filter, Remote service, Spring cache, Executor service, Live Object service, Scheduler service) Redisson 提供了使用Redis 的最简单和最便捷的方法。Redisson 的宗旨是促进使用者对Redis的关注分离(Separation of Concern),从而让使用者能够将精力更集中地放在处理业务逻辑上。Redisson的官方网址是:https://redisson.org/

优点:

使用者对 Redis 的关注分离,可以类比 Spring 框架,这些框架搭建了应用程序的基础框架和功能,提升开发效率,让开发者有更多的时间来关注业务逻辑;
提供很多分布式相关操作服务,例如,分布式锁,分布式集合,可通过Redis支持延迟队列等。
缺点:

Redisson 对字符串的操作支持比较差。
4. 使用建议

结论:lettuce + Redisson

Jedis 和 lettuce 是比较纯粹的 Redis 客户端,几乎没提供什么高级功能。Jedis 的性能比较差,所以如果你不需要使用 Redis 的高级功能的话,优先推荐使用 lettuce。

Redisson 的优势是提供了很多开箱即用的 Redis 高级功能,如果你的应用中需要使用到 Redis 的高级功能,建议使用 Redisson。具体 Redisson 的高级功能可以参考:https://redisson.org/


Spring RedisTemplate
最后再说一下Spring-data-redis,它是spring大家族的一部分,提供了在srping应用中通过简单的配置访问redis服务,对reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate提供了redis各种操作、异常处理及序列化,支持发布订阅,并对spring cache进行了实现。

如果不使用redisson那肯定会使用RedisTemplate这个操作类,几乎所有相关redis的操作都被封装在这个类中。
————————————————
版权声明:本文为CSDN博主「Zhang.Voi」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_35222843/article/details/118186894

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java Redis三种客户端对比(优缺点对比+使用建议) 的相关文章

随机推荐

  • java中的输入输出流概念_java输入输出--I/O流的概念和划分

    理解数据流 数据流 Stream 是一组有顺序的 有起点的 有终点的字节集合 是对输入和输出的总称和抽象 一般地 数据流分为 输入流 InputStream 和输出流 OutputStream 输入流只能读不能写 而输出流只能写不能读 通常
  • Openwrt一条命令把整个路由器搞蹦了

    对于rm rf这条命令以前吃过一次亏了 这次又没有长记性 以前本来想删除某个目录下所有的c文件删掉 但是cd到该目录时少进了一级目录 结果啊把其他人忙活里几天的代码全搞没了 我只想说一下 当某种破坏已经造成 并且破坏没有继续 而你又一时不知
  • 彻底关闭 Win10 系统自动更新【四大步骤】

    Windows 10 的自动更新非常顽固 多用户在网上试了各种关闭win10自动更新的方法 刚开始看着好像是关闭更新了 可没过多久系统就又开始自动更新了 今天笔者就来教大家如何彻底关闭win10自动更新 该方法亲测有效 一 禁用 Windo
  • 声学基础:声级计和声压级参数简介​。在频率轴上两个音高之间的距离称为音程。一个8度音程称为倍频程(Octave)。人耳听觉范围(以20Hz为基频)可分为10个倍频程​

    在正式开始前 请让我们先搞清两个概念 音频和声学 实践中 尤其在中文环境下 很多人容易将两者混为一谈 这里必须说明的是 声学 acoustic 通常研究通过空气等介质传播的声音 而 音频 audio 指的是那些直接在缆线或音频元器件中传导的
  • Java-面向对象之(封装+继承+多态)

    文章目录 一 什么是面向对象 二 类和对象 三 this的作用 1 this 成员变量名字 2 this 成员方法名字 3 this 构造方法名字 4 this的特性 四 封装 1 什么是封装 2 访问权限修饰符 3 五 继承 六 多态 1
  • Check It Again: Progressive Visual Question Answering via Visual Entailment

    最近要做关于VQA的项目 要读paper 这里收集了一些有关于这篇paper的资料 资料 导读 SFFAI 130 视觉问答专题 佀庆一 中国科学院信息工程研究所在读博士 2021 Check it again Progressive Vi
  • 中国大学MOOC课程《程序设计入门——C语言》 期末考试编程题

    1 最简分式 10分 题目内容 分数可以表示为 分子 分母 的形式 编写一个程序 要求用户输入一个分数 然后将其约分为最简分式 最简分式是指分子和分母不具有可以约分的成分了 如6 12可以被约分为1 2 当分子大于分母时 不需要表达为整数又
  • python-dataframe如何计算多条件下的重复次数

    data 次数 1 新建用来统计出现次数的列 并且初始值为1 for index in range 0 len data for index2 in range index 1
  • 数字信号处理:重要知识点整理

    文章目录 0 最重要 DFT和FFT的区别 1 连续时间信号频域分析 2 通过离散时间信号的Z变换表达式X z 直接写出时域离散信号 序列 x n 的方法 3 部分分式法的MATLAB实现 求X z 的部分展开式 4 稳定系统 5 求频响特
  • javaFX安装及使用

    一 javaFX下载 Jdk 从 1 8 开始 jdk 自带 JavaFX 到 Jdk 11 开始 jdk 不再内置 JavaFX 所以如果你使用的是高版本的 jdk 在使用 javaFX 的时候就需要先安装 javaFX 并在 idea
  • 在 Python 中打印没有逗号和括号的列表

    文章目录 使用 sep 打印不带逗号和括号的列表 在 Python 中打印不带括号的列表 使用 sep 打印不带括号的列表 Python 中要打印不带逗号和括号的列表 使用 str join 方法将列表连接成一个字符串 如果列表包含数字 将
  • Java源码分析(一)Integer

    当你掌握Java语言到了一定的阶段 或者说已经对Java的常用类和API都使用的行云流水 你会不会有一些思考 比如 这个类是如何设计的 这个方法是怎么实现的 接下来的一系列文章 我们一起学习下Java的一些常见类的源码 本篇 一起分析下In
  • struts2线程安全

    问题 Struts 2 Action对象为每一个请求产生一个实例 因此没有线程安全问题 Spring的Ioc容器管理的bean默认是单实例的 上一次请求处理的状态信息被保持下来 并影响了下一次的请求 实际上就是Action中的类变量被不同的
  • Mybatis 的部分优化及注意事项

    一 加载数据库时可以编写外部文件通过导入的方式获取 1 外部资源 driver com mysql jdbc Driver url jdbc mysql localhost 3306 mybatis userSSL true useUnco
  • 求全排列(JAVA)

    输出自然数1输出自然数1到n所有不重复的排列 即n的全排列 到n所有不重复的排列 即n的全排列 package n的全排列 import java util Scanner author admin public class Main st
  • 【HTML+CSS+JS】登录注册页面大合集

    前言 学JS也学了一段时间 正巧碰上了人工智能要调用人脸识别接口进行真人人脸识别 于是便萌生了用人脸来进行注册和登录的想法 这样的话就需要开发一个登录注册页面 然后用JS绑定注册事件调用人脸识别接口进行登录注册 饭要一口一口吃 路要一步一步
  • Vue项目启动内存溢出 js stack overflow

    方法1 在node modelus目录下的 vue cli service bin vue cli service js文件中的首行加入 usr bin env node max old space size 4096 方法二 修改本地项目
  • 入门卷积神经网络必备,基础、理论、实战一网打尽!

    目录 前言 教程安排 1 基本概念 2 论文解读 3 模型结构与原理 4 模型实战 5 问题解答 6 目标检测领域 相关技术群 前言 其实 挺早之前就有更新有关于卷积神经网络文章的想法 这些时间里 因为一些事情 更新进度确实慢了一些 但是也
  • 三星显示器服务器网络设置方法,三星显示器也有这样的通病,看完你就知道怎么解决...

    原标题 三星显示器也有这样的通病 看完你就知道怎么解决 小编今天在网上看到一个教程说三星显示器能开机 关键是屏幕还会提示无信号输入 看完非常兴奋 因为小编店里就有一台三星的显示器出现一模一样的故障 就是开机接上电脑后提示无信号输入 但是显示
  • Java Redis三种客户端对比(优缺点对比+使用建议)

    Redis的Java客户端很多 官方推荐的有三种 Jedis Redisson和lettuce 在这里对Jedis和Redisson进行对比介绍 Jedis 轻量 简洁 便于集成和改造 支持连接池 支持pipelining 事务 LUA S