提前准备
redis 集群
需求描述
大数据量(百万级别)
快速高效
构造方法
方法一:
代码生成 Redis Protocol 数据文件
package com.cs.test1;
import org.junit.Test;
import java.io.*;
public class RedisConstructionDataTest {
/**
* 字符串连接
* 将各种数据类型变量的字符串形式追加到当前序列中
*/
private String getString(String... args) {
//StringBuffer stringbuffer = new StringBuffer();
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("*").append(args.length).append("\r\n");
for (String arg : args) {
stringBuilder.append("$").append(arg.getBytes().length).append("\r\n");
stringBuilder.append(arg).append("\r\n");
}
return stringBuilder.toString();
}
@Test
public void generateFile() {
Long startTime = System.currentTimeMillis();
//FileWriter file = null;
String file = "F:\\redis_data.txt";
BufferedWriter bufferedWriter = null;
StringBuilder stringBuilder = new StringBuilder();
try {
/**
* 创建了一个字符写入流的缓冲区对象,并和指定要被缓冲的流对象相关联。
*/
//file = new FileWriter("F:\\redis_data.txt");
//bufferedWriter = new BufferedWriter(file);
bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "utf-8"));
for(int i=1; i <= 2000000; i++){
if (i / 3 == 0) {
//刷新流中的缓冲,将缓冲数据写到目的文件中去
bufferedWriter.flush();
}
stringBuilder.setLength(0);
stringBuilder.append(this.getString("set", "test" + i, "{\"Body\":\"互联网测试管理组\",\"personId\":\""+i+"\",\"csId\":\""+i+"\"}"));
bufferedWriter.append(stringBuilder.toString());
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
//刷新流中的缓冲,将缓冲数据写到目的文件中去
bufferedWriter.flush();
bufferedWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
long endTime = System.currentTimeMillis();
System.out.println("耗时: "+(endTime - startTime)/1000+" s");
}
}
查看生成文件
解释与说明:
如果设置显示全部字符,会发现每行已 CR LF 结尾,相当于\r\n。因为 Redis 的通信协议首先以行来划分,每行以\r\n 结束。
*3\r\n # 消息一共有三行
$3\r\n # 第一行字节数为 3
set\r\n # 第一行的内容
$5\r\n # 第二行字节数为 5
test1\r\n # 第二行的内容
$61\r\n # 第三行字节数为 61
{"Body":"互联网测试管理组","personId":"1","csId":"1"}\r\n # 第三行的内容
上传数据文件到 Redis 服务器
执行 Redis 命令
nohup cat redis_data.txt |redis-cli -h 10.101.21.162 -p 10001 -c --pipe >error1.log 2>&1 &
nohup cat redis_data.txt |redis-cli -h 10.101.21.162 -p 10002 -c --pipe >error2.log 2>&1 &
nohup cat redis_data.txt |redis-cli -h 10.101.21.162 -p 10003 -c --pipe >error3.log 2>&1 &
注意:集群每个主节点端口号都需要执行一遍
统计数据
方式一、查看命令执行后生成的日志文件进行统计
解释与说明:
插入数据量=(replies - errors),然后每个端口号数据量相加
方式二、查看 info 中 keyspace 信息进行统计
解释与说明:
插入数据量=Keys,然后每个端口号数据量相加(前提集群中没有数据;如果有,最好在插入数据之前查看有多少)