Redis6版本中,使用了多线程处理网络IO,但是执行写命令仍然是单线程。本文就是对Redis5、Redis6两个版本中的不同网络模型,进行性能测试,尤其是对于大的Key和String类型的Value的测试。
根据官方介绍,对于Key和String类型的Value,最大不超过512MB,这个限制显然是没有太大参考意义的。那么究竟有没有一个合理的指标和界限,能够区分出单线程和多线程的网络IO模型的性能呢?
以下执行的都是set key value命令。

首先测试的是第一次和Redis建立连接的测试。

Key大小 Value大小 单线程 多线程
2byte 2byte 0.23s 0.26s
5MB 5MB 0.58s 0.57s
50MB 50MB 3.3s 3.8s

所有测试数据都是第一次连接Redis,由于需要进行Redis实例化,创建线程池等,看不出差别。

第二次测试。

Key大小 Value大小 单线程 多线程
2byte 2byte 0.0032452s 0.0028476s
5MB 5MB 0.2858883 0.2800712s
50MB 50MB 2.8195027 2.9983646s

可以看出,对于两种不同的网络模型而言,没有非常明显的性能差异。
而对于单个大的Key和String类型的Value,对Redis的性能影响是十分明显的,也就是说,我们在实际生产中,要尽可能避免会使用到大的Key和String类型的Value。如果的确遇到这样的场景,可以考虑对相应的Key和Value做分片,并配合scan命令,本质还是减少单个耗时命令对Redis的阻塞,影响整个系统的性能。

最后,再放一张byte与rt的统计图,均来自本次测试。
Redis不同版本(单/多线程网络模型)下性能测试

相关文章:

  • 2022-12-23
  • 2021-05-06
  • 2021-12-14
  • 2021-05-31
  • 2021-07-06
  • 2021-04-29
猜你喜欢
  • 2021-08-25
  • 2021-12-22
  • 2021-09-20
  • 2021-12-30
  • 2021-06-14
  • 2022-12-23
  • 2021-06-05
相关资源
相似解决方案