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

性能,不同,Redis ,方法 · 浏览次数 : 42

小编点评

## 测试目的对比 Redis 不同插入方法的性能区别 **测试目标:** - 测试 Redis 的不同插入方法的性能差异。 - 测试使用管道的方式如何提高 Redis 的写入性能。 **测试数据:** - 数据key:`SMGP_value` - 数据量:10万个数据点 - 单条插入数据:JSON字符串 **测试方法:** 1. 单线程遍历数据列表 2. 管道分批插入 - 分为 3 批,每批 3万数据 - 每批 1万条数据使用管道一次性插入 3. 多线程10个线程分批插入 - 每批 1万条数据使用管道一次性插入 **测试结果:** | 方法 | 耗时 (秒) | 堆内存 (MB) | |---|---|---| | 单线程遍历 | 11.22698333 | 572.2540665 | | 管道分批 | 36.8785 | 614.52574155 | | 管道一次性 | 34.2025 | 482.4296875 | | 多线程10个线程 | 114.9095 | 429.8007813 | **测试分析:** * 使用管道能显著提高 Redis 的写入性能。 * 使用多线程能显著提高遍历单条数据写入 redis 的性能。 * 对于不同的插入方式,管道和多线程的性能基本差不多。 **不足之处:** * 由于存在网络波动,不同方法测试时,网络差异较大,可能导致结果不太准确。 * 细微的差别无法很好判断,比如:单线程的管道和多线程的管道哪个性能更优?

正文

1. 测试目的

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

2. 测试数据

key:SMGP_

value: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 进行监控的,凭肉眼观察,不是很准确。

与Redis 不同插入方法的性能对比相似的内容:

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

1. 测试目的 对比 Redis 不同插入方法(插入同时能设置过期时间)的性能区别。 2. 测试数据 key:SMGP_ value:JSON数据 { "spName":"100003", "protocol":"SMGP", "remoteAddress":"192.192.192.192:441

[转帖]Redis配置项汇总(超级详细)

http://c.biancheng.net/redis/config-summary.html 本节对 Redis 的常用配置项和基本命令做简单的总结,您可以把本篇文章看做简版的速查手册。不过,需要注意的是由于 Redis 不同版本的差异,配置项会多少存在一些不同,但总体的来说,大同小异。 基本配

Redis的三种持久化策略及选取建议

Redis三种不同的持久化策略:RDB(快照)、AOF(追加文件)、混合。这三种策略各有优缺点,需要根据不同的场景和需求进行选择和配置。本文将介绍这三种策略、选取建议及常见问题的解决方案

[转帖]浅谈redis采用不同内存分配器tcmalloc和jemalloc

http://www.kaotop.com/it/173669.html 我们知道Redis并没有自己实现内存池,没有在标准的系统内存分配器上再加上自己的东西。所以系统内存分配器的性能及碎片率会对Redis造成一些性能上的影响。 在Redis的 zmalloc.c 源码中,我们可以看到如下代码: ?

[转帖]一文搞懂不同方式Redis集群搭建

https://bbs.huaweicloud.com/blogs/380521 【摘要】 1 实验环境准备 1.1 构建Redis的Docker镜像[root@iZ2ze4m2ri7irkf6h6n8zoZ redis]# docker pull redis[root@iZ2ze4m2ri7irk

(四)Redis 缓存应用、淘汰机制

1、缓存应用 一个系统中不同层面数据访问速度不一样,以计算机为例,CPU、内存和磁盘这三层的访问速度从几十 ns 到 100ns,再到几 ms,性能的差异很大,如果每次 CPU 处理数据时都要到磁盘读取数据,系统运行速度会大大降低。 所以,计算机系统中,默认有两种缓存: (1)CPU 里面的末级缓存

[转帖]Redis的info信息.

Info信息 以下信息是在redis-cli中执行info命令,可能和redis cluster版本有点不同的地方,仅此作为参考。 123456789101112131415161718192021222324252627282930313233343536373839404142434445464

[转帖]Redis是的缓存特征及类型

文章目录 缓存特征缓存处理请求的两种情况缓存的类型只读缓存读写缓存 缓存特征 一个系统中的不同层之间的访问速度不一样,所以我们才需要缓存,这样就可以把一些需要频繁访问的数据放在缓存中,以加快它们的访问速度。 计算机系统中的三层存储结构,以及它们各自的常用容量和访问性能 计算机系统中,默认有两种缓存:

不同网络情况对测试脚本的影响

# 不同网络情况对测试脚本的影响 # 测试脚本: ``` 原生: import redis import timeit r = redis.Redis(host='10.110.x.x', port=36379, password='xxxx',db=0) def func() : for i in

聊一聊redis十种数据类型及底层原理

概述 Redis 是一个开源的高性能键值数据库,它支持多种数据类型,可以满足不同的业务需求。本文将介绍 Redis 的10种数据类型,分别是 string(字符串) hash(哈希) list(列表) set(集合) zset(有序集合) stream(流) geospatial(地理) bitma