Redis客户端Jedis、lettuce和Redisson对⽐
Redis ⽀持多种语⾔的客户端,下⾯列举了部分 Redis ⽀持的客户端语⾔,⼤家可以通过查看 Redis ⽀持的客户端详情。
C语⾔
C++
C#
Java
Node.js
PHP
Redis 是⽤单线程来处理多个客户端的访问,因此作为 Redis 的开发和运维⼈员需要了解 Redis 服务端和客户端的通信协议,以及主流编程语⾔的 Redis 客户端使⽤⽅法,同时还需要了解客户端管理的相应 API 以及开发运维中可能遇到的问题。
Redis 客户端通信协议
Redis制定了RESP(Redis Serialization Protocol,Redis序列化协议)实现客户端与服务端的正常交互,这种协议简单⾼效,既能够被机器解析,⼜容易被⼈类识别。
RESP可以序列化不同的数据类型,如整型、字符串、数组还有⼀种特殊的Error类型。需要执⾏的Redis命令会封装为类似于字符串数组的请求然后通
过Redis客户端发送到Redis服务端。Redis服务端会基于特定的命令类型选择对应的⼀种数据类型进⾏回复。
1. RESP 发送命令格式
在RESP中,发送的数据类型取决于数据报的第⼀个字节:
单⾏字符串的第⼀个字节为+。
错误消息的第⼀个字节为-。
整型数字的第⼀个字节为:。
定长字符串的第⼀个字节为$。
RESP数组的第⼀个字节为*。
数据类型本⽂翻译
名称
基本特征例⼦
Simple String 单⾏字符
串
第⼀个字节是+,最后两个字节是\r\n,其他字节是字符串内容+OK\r\n
Error错误消息第⼀个字节是-,最后两个字节是\r\n,其他字节是异常消息的⽂本内容-ERR\r\n Integer整型数字第⼀个字节是:,最后两个字节是\r\n,其他字节是数字的⽂本内容:100\r\n
Bulk String 定长字符
串
第⼀个字节是$,紧接着的字节是内容字符串长度\r\n,最后两个字节是\r\n,其他字节是字符串内
容
$4\r\ndoge\r\n
Array RESP数组第⼀个字节是*,紧接着的字节是元素个数\r\n,最后两个字节是\r\n,其他字节是各个元素的内
容,每个元素可以是任意⼀种数据类型
*2\r\n:100\r\n$4\r\ndoge\r\n
发送的命令格式如下,CRLF代表"\r\n":
*<;参数数量> CRLF
$<;参数1的字节数量> CRLF
<;参数1> CRLF
...
$<;参数N的字节数量> CRLF
<;参数N> CRLF
以set hello world这个命令为例,发送的内容就是这样的:
*3
$3
SET
$5
hello
$5
world
第⼀⾏*3表⽰有3个参数,3表⽰接下来的⼀个参数有3个字节,接下来是参数,5表⽰下⼀个参数有5个字节,接下来是参数,$5表⽰下⼀个参数有5个字节,接下来是参数。
所以set hello world最终发送给redis服务器的命令是:
*3\r\n$3\r\nSET\r\n$5\r\nhello\r\n$5\r\nworld\r\n
2. RESP 响应内容
Redis的返回结果类型分为以下五种:
正确回复:在RESP中第⼀个字节为"+"
错误回复:在RESP中第⼀个字节为"-"
整数回复:在RESP中第⼀个字节为":"
字符串回复:在RESP中第⼀个字节为"$"
多条字符串回复:在RESP中第⼀个字节为"*"
(+) 表⽰⼀个正确的状态信息,具体信息是当前⾏+后⾯的字符。
(-) 表⽰⼀个错误信息,具体信息是当前⾏-后⾯的字符。
(*) 表⽰消息体总共有多少⾏,不包括当前⾏,*后⾯是具体的⾏数。
redis支持的五种数据类型($) 表⽰下⼀⾏数据长度,不包括换⾏符长度\r\n,$后⾯则是对应的长度的数据。
(:) 表⽰返回⼀个数值,:后⾯是相应的数字节符。
有了这个协议,我们就可以编写程序来和 Redis 服务端进⾏通信。由于 Redis 的流⾏,已经存在了很多流⾏的开源客户端。本⽂主要选择 Java 领域 Redis 官⽅推荐的客户端进⾏介绍。
Redis 的 Java 客户端
Redis 官⽅推荐的 Java 客户端有Jedis、lettuce 和 Redisson。
1. Jedis
优点:
⽀持全⾯的 Redis 操作特性(可以理解为API⽐较全⾯)。
缺点:
使⽤阻塞的 I/O,且其⽅法调⽤都是同步的,程序流需要等到 sockets 处理完 I/O 才能执⾏,不⽀持异步;
Jedis 客户端实例不是线程安全的,所以需要通过连接池来使⽤ Jedis。
2. lettuce
Processing math: 100%
优点:
⽀持同步异步通信模式;
Lettuce 的 API 是线程安全的,如果不是执⾏阻塞和事务操作,如BLPOP和MULTI/EXEC,多个线程就可以共享⼀个连接。
3. Redisson
优点:
使⽤者对 Redis 的关注分离,可以类⽐ Spring 框架,这些框架搭建了应⽤程序的基础框架和功能,提
升开发效率,让开发者有更多的时间来关注业务逻辑;提供很多分布式相关操作服务,例如,分布式锁,分布式集合,可通过Redis⽀持延迟队列等。
缺点:
Redisson 对字符串的操作⽀持⽐较差。
4. 使⽤建议
结论:lettuce + Redisson
Jedis 和 lettuce 是⽐较纯粹的 Redis 客户端,⼏乎没提供什么⾼级功能。Jedis 的性能⽐较差,所以如果你不需要使⽤ Redis 的⾼级功能的话,优先推荐使⽤lettuce。
参考
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论