Resp协议
redis官网说道,redis快的其中一个原因是它使用的Resp协议有以下特点:
- 实现简单
- 解析简单
- 人为可读
那到底什么是Resp协议呢?我们可以写个demo,就很清楚了。Java使用Jedis连接redis服务器并实现正常通信,所以Jedis发送的数据格式肯定满足Resp协议,那我们在本地启动一个4379的socket假装是redis,看看从Jedis发送过来的到底是什么数据!
假的redis服务器,等待Jedis客户端连接
try {
ServerSocket serverSocket = new ServerSocket(6379);
Socket rec = serverSocket.accept();
byte[] result = new byte[2048];
rec.getInputStream().read(result);
System.out.println(new String(result));
} catch (IOException e) {
e.printStackTrace();
}
Jedia发送数据到redis
Jedis jedis = new Jedis("127.0.0.1",6379);
jedis.set("name","lucy");
jedis.close();
输出
*3
$3
SET
$4
name
$4
lucy
这样就很清楚了,第一个*3
表示后面的SET
、name
、lucy
。$3
表示SET
有三个字母
如何将mysql的数据高效转移到redis
- 查询需要转移的数据,将结果集拼上必要的符号,使得满足Resp协议的数据格式,这时候得到的是已经拼接好的数据结果集
- 使用pipeline管道将数据结果集更新到redis
问题
如果是用Java将结果集通过pipeline管道更新到redis,应该控制一次性发送的数据长度,防止因拆包导致错误。