Redis 不同插入方法的性能对比

1. 测试目的

对比 Redis 不同插入方法(插入同时能设置过期时间)的性能区别。

2. 测试数据

key:SMGP_

value:JSON数据

json 复制代码
{
	"spName":"100003",
  	"protocol":"SMGP",
  	"remoteAddress":"192.192.192.192:44192",
  	"host":"192.192.192.192:44192",
  	"port":44192,
  	"msgIds":"192192192192192192192"
}

数据量:10万

redis:采用蓝鲸云上的 redis,模拟真实生产环境的网络影响。

3. 待测试方法

单线程

  • 遍历数据列表,单条插入
  • 使用管道分批插入,分为 3 批,每批 3万,最后一批 4万
  • 使用管道一次性插入 10 万条

多线程

  • 10 个线程分批插入,每批 1万条数据,遍历数据列表,单条插入
  • 10 个线程分批插入,每批 1万条数据,使用管道一次性插入 1 万条

4. 测试结果

单线程

遍历单条插入

  • 耗时:11.22698333 分钟
  • JVM 堆内存使用情况:最高 572.2540665 MB

使用管道分批插入

  • 耗时:两次平均 36.8785 秒
  • JVM 堆内存使用情况:两次最高平均 614.52574155 MB

使用管道一次性插入

  • 耗时:两次平均 34.2025 秒
  • JVM 堆内存使用情况:两次最高平均 482.4296875 MB

多线程

遍历单条插入

  • 耗时:两次平均 114.9095 秒
  • JVM 堆内存使用情况:两次最高平均 429.8007813 MB

管道一次性插入

  • 耗时:两次平均 52.51 秒
  • JVM 堆内存使用情况:两次最高平均 513 MB

5. 测试结果分析

  • 对于 redis 的写入操作,应尽量避免遍历单条插入,由于频繁连接和释放连接,性能太低。
  • 使用管道能显著提高 redis 的写入性能。
  • 使用多线程能显著提高遍历单条数据写入 redis 的性能
  • 对于不同的插入方式,消耗的资源大小基本差不多。

6. 不足之处

  • 由于存在网络波动,不同方法测试时,网络差异较大,可能导致结果不太准确。因此对于细微的差别无法很好判断,比如:单线程的管道和多线程的管道哪个性能更优?
  • 堆内存的消耗由于使用的 jconsole 进行监控的,凭肉眼观察,不是很准确。