天地维杰网

人如秋鸿来有信,事若春梦了无痕


  • 首页

  • Redis

  • java

  • linux

  • 日常问题

  • Spring和Springboot

  • Mac相关

  • 中间件

  • 架构

  • python

  • 前端

  • jvm

  • c语言

  • web3

  • 归档

  • 关于

  • 搜索
close

时间: 0001-01-01   |   阅读: 53 字 ~1分钟

原文地址 https://developpaper.com/redis-6-0-multithreading-performance-test-results-and-analysis/

Redis 6.0 多线程性能测试和分析

因为做的主要是低延迟的内存操作,CPU不是内存操作的瓶颈,最可能的瓶颈是网络IO操作。Redis6.0支持多线程,只是套接字层面的多线程,主要的内存读写仍是多线程模式。

测试环境

测试配置:CENTOS 7, 16核CPU 32G内存

Redis version: 6.0.6

分别配置 1线程、2线程、4线程、6线程、8线程和10线程,200并发链接处理1亿请求。为避免网络延迟,redis-benchmark进行本地测试。

redis-benchmark -d 128 -c 200 -n 1000000 -t set -q --threads 8

坑

  • 坑1

CENTOS7 默认的GCC版本是 4.* , Redis6.0不能直接编译,因此需要升级GCC,因为机器不支持Yum 安装,所以需要用源码编译,又因为需要一些其他依赖,所以扁蓄用了一些时间。

  • 坑2 要测试多线程IO,redis-benchmark也必须加 --threads来使用多线程模式测试。

测试结果及分析

不同线程数下100Wget/set请求的QPS结果

可以看出:

2个线程的QPS为18W/s,大约于单线程的9W/s的两倍。4线程相对于2线程,有约30%的提升。

对于set操作,4线程、6线程、8线程的QPS没太大差别,约为23W~24W。8线程相对于4到6线程,有约10%的提升。

6线程或10线程,与最高效的8线程相比,性能开始下降,效果与4线程或6线程等同。

因此,本地环境,I/O线程数设置2个或4个就可以,最大不要超过8个,否则性能会降级。但是要注意,要么不开,要开线程数最低也得设置为1个。

下面是不同线程数下GET/SET的QPS比较。

io-threads-do-reads 测试

io-threads-do-reads参数用于设置读取套接字操作是否使用多线程操作。Redis套接字读取使用多路复用技术,本身不回成为瓶颈。现在测下配置这个参数是否会对性能有所改善。

从下图可以看出,io-threads-do-reads开不开对性能影响不大。

开启多线程且开启多线程读取套接字,线程数设置为2:

开启多线程关闭多线程套读取套接字,线程数设置为2:

不与天斗Domino

不与天斗Domino

Programmer & Architect

183 日志
15 分类
224 标签
© 2013 - 2023 天地维杰网 京ICP备13019191号-1
Powered by - Hugo v0.63.2
Theme by - NexT
0%