漫游jedis-RESP通信实现
来源:互联网 发布:三菱plc编程入门梯形图 编辑:程序博客网 时间:2024/05/18 03:53
Redis 客户端与服务器之间的通讯使用的协议Redis Serialization Protocol,简称RESP。
insight jedis核心功能:RESP通信实现。
1. 通信实现 (redis.clients.jedis.Connection);
2. RESP协议实现 (redis.clients.jedis.Protocol, redis.clients.util.RedisOutputStream, redis.clients.util.RedisInputStream)
jedis 通信实现(典型的socket 编程template):
/** * jedis执行命令的典型模板 * 1. check * 2. send command * 3. recive result **/public String set(final String key, String value) { checkIsInMultiOrPipeline(); // client.set(key, value); return client.getStatusCodeReply();}// 客户端command + arguments 发送的实现protected Connection sendCommand(final Command cmd, final byte[]... args) { try { // 主动check connection,兼容socket初始化过程,常用的做法 connect(); // 根据RESP,请求信息以字节码写入os Protocol.sendCommand(outputStream, cmd, args); pipelinedCommands++; return this; } catch (JedisConnectionException ex) { // 即使报错,在断开连接前,得到server 的报错信息 // ... // 关键标识 broken = true; throw ex; }}
RESP协议实现
首先,了解协议内容: https://redis.io/topics/protocol#resp-protocol-description
特点: 实现简单、解析快速、可读性强。
然后,insight:
/** * 典型的协议编码实现 * * 支持的数据类型: Simple Strings, Errors, Integers, Bulk Strings and Arrays. * 数据类型的表示:Simple Strings(+), Errors, Integers(:), Bulk Strings($) and Arrays(*) * 不同的块之间一定要用CRLF间隔(\r\n) **/private static void sendCommand(final RedisOutputStream os, final byte[] command, final byte[]... args) { try { os.write(ASTERISK_BYTE);// * 我是数组 os.writeIntCrLf(args.length + 1);// 命令1 + 参数n os.write(DOLLAR_BYTE);// $ os.writeIntCrLf(command.length);// 长度 os.write(command);// 操作命令 os.writeCrLf();// 间隔符号 for (final byte[] arg : args) {// 追加入参 os.write(DOLLAR_BYTE); os.writeIntCrLf(arg.length); os.write(arg); os.writeCrLf(); } } catch (IOException e) { throw new JedisConnectionException(e); }}
总结:通信必用socket,jedis 简洁的实现RESP 协议完成与服务的通信,值得借鉴。
后续会Insight pool 的简单实用。
阅读全文
0 0
- 漫游jedis-RESP通信实现
- 移动IP与通信漫游
- OpenGL漫游的实现
- OSG实现场景漫游
- CameraPath实现简单漫游
- 移动通信的语音与数据漫游
- jedis实现监控-JedisMonitor
- Jedis动态分片实现
- Jedis主从切换实现
- Jedis 实现发布订阅
- Jedis缓存实现类
- Jedis缓存实现类
- Jedis连接 HelloWorld实现
- Jedis连接 HelloWorld实现
- ArcEngine地图漫游的实现
- 漫游
- 漫游
- 漫游
- Hbase总结,Hbase安装部署,Hbase shell命令
- 禁用鼠标键盘和桌面不显示鼠标指针
- java-jdbc
- Java消息队列--ActiveMq 实战
- android 打电话
- 漫游jedis-RESP通信实现
- 2.A+B——the first step
- js—QQ菜单简单实例
- [POI2005]SKA-Piggy Banks
- [化工流程模拟].TLF-SOFT-CHEMSTATIONS.CHEMCAD.V6.0.1-MAGNiTUDE.iso
- Session和Cookie学习笔记—Cookie使用
- Reflection2017.11.4
- 你不努力,未来的学生都不会服你!
- 并发编程(3)-一个对象一个锁