Redis性能攻略:Redis-benchmark工具与实用性能优化技巧

news2024/9/20 20:21:38

Redis作为一种高性能的内存数据库,广泛应用于各种业务场景。然而,随着业务规模的扩大和数据量的增长,Redis的性能问题逐渐凸显出来。为了提高Redis的性能,本文将深入探讨Redis性能优化方案,包括参数配置、数据结构、多线程、集群分片等方面。

一、性能测试工具

1.1、Redis-benchmark

在聊Redis性能优化方案之前,我们来了解一下Redis性能测试工具 redis-benchmark。

Redis 包含一个名为 redis-benchmark 的实用程序,它可以模拟 N 个客户端同时发送 M 个查询的命令执行情况。该实用程序提供了一组默认的测试,你也可以提供一组自定义的测试。

1.2、影响redis性能的因素

有多种因素会直接影响redis的性能。这里,我们分析一些,因为它们可以改变所有benchmark测试的结果。但请注意,一个典型的redis实例,运行在低速、未调优过的系统上,提供的性能对大多数应用来说也是够好的。

  • 网络带宽和延迟常常是直接影响性能。启动benchmark程序前,使用ping程序快速检查客户端和服务器之间的延迟是一种好习惯。在很多现实的场景中,redis吞吐量先受到网络限制,然后才是CPU。
  • CPU是另一个重要的因素。作为单线程的,redis喜欢高速有大缓存而不是有多个核的cpu。当客户端和服务器运行在同一个系统上,cpu就是redis-benchmark的限制因素。
  • 相同的硬件上,运行在虚拟机上的redis会比运行在真实系统上的redis慢。
  • 当服务器和客户端benchmark程序运行同一系统上时,TCP/IP回路和unix域套接字都可使用。
  • 大量使用管道化(即长管道)时,比起使用TCP/IP,unix域套接字的性能提升会有所下降。
  • 使用以太网访问redis,数据大小保持小于以太网报文大小(大约1500字节),使用管道化汇集多条命令特别有效。实际上,处理10字节,100字节,1000字节的查询几乎是一样的吞吐量。如下图。

  • 在有多个CPU插口的服务器上,redis的性能依赖于NUMA配置和进程位置。

  • 使用高级配置,客户端连接数也是很重要的因素。

其他要考虑的事情

benchmark的一个重要目的是得到可重复的结果,这样才能和其他测试的结果进行比较。

  • 如果打算使用RDB或AOF,请确保系统中没有其他I/O活动。避免把RDB或AOF文件在NAS或NFS上共享,或放在其他影响网络带宽或延迟的设备上(比如Amazon EC2的EBS)。
  • 设置redis的日志级别(参数loglevel)为warning 或notice。避免把日志放在远程文件系统上。

p.s.以上图来源于Redis官方文档中,想了解更详细的可以进入Redis官方文档中查看。

二、性能优化方案

2.1、硬件配置优化

网络优化:

  1. 使用高性能网络设备: 确保Redis服务器和客户端之间的网络连接是高性能的,采用千兆以太网或更高速的网络设备。
  2. 调整内核参数: 针对高负载的情况,优化操作系统的网络相关内核参数,包括调整TCP连接数、缓冲区大小等。
  3. 使用连接池: 在客户端使用连接池,避免频繁地打开和关闭网络连接,减少连接的建立和断开开销。

内存优化:

  1. 使用高性能内存条:选择具有较高速度和低延迟的内存条。
  2. 增加内存容量: Redis是一个内存数据库,更多的内存通常意味着更好的性能,特别是当你的数据集逐渐增大时。确保服务器上安装了足够的内存,以满足数据存储的需求。
  3. 合理设置maxmemory参数: 设置maxmemory参数,防止Redis使用过多内存导致系统出现性能问题。
  4. 使用内存碎片整理: 定期查找和整理内存碎片。

2.2、参数配置优化

Redis的性能参数需要结合实际的应用场景来调整,以达到最佳的性能表现。

  • 设置合理的 maxmemory 参数:maxmemory 参数用于限制 Redis 内存的使用量。如果设置过小,可能会导致 Redis 频繁 LRU 淘汰,影响性能。如果设置过大,可能会导致 Redis 内存不足,导致服务不可用。
  • 设置合理的 maxmemory-policy 参数:maxmemory-policy 参数用于指定 Redis 在内存不足时采取的策略。
  • 设置合理的 timeout 参数:timeout 参数用于指定客户端连接超时时间。如果设置过小,可能会导致客户端连接频繁断开,影响性能。如果设置过大,可能会导致客户端连接时间过长,影响性能。
  • 设置合理的 loglevel 参数:loglevel 参数用于指定 Redis 日志级别。如果设置过高,可能会导致 Redis 日志输出过多,影响性能。如果设置过低,可能会导致重要的日志信息丢失,影响排错。

2.3、数据结构优化

Redis支持多种数据结构,每种数据结构都有自己的特点和适用场景。选择合适的数据结构可以节省内存空间,减少网络开销,提高查询速度。例如:

  • 避免使用过大的键名或值,因为它们会占用更多的内存和网络带宽。
  • 避免使用过多的层级结构,因为它们会增加查询的复杂度和开销。
  • 避免使用过于稀疏的数据结构,因为它们会浪费内存空间。例如,如果你需要存储一个大量空值的矩阵,可以考虑使用压缩列表或位图等更紧凑的数据结构。

2.4、使用合理的过期策略

Redis 的过期策略可以有效提升 Redis 的性能。以下是一些使用合理的过期策略优化 Redis 性能的技巧:

  • 根据数据使用情况设置合理的过期时间:过期时间设置过短,会导致 Redis 频繁进行 LRU 淘汰,影响性能。过期时间设置过长,会导致 Redis 内存使用率过高,影响性能。
  • 根据数据访问频率设置合理的过期策略:对于经常访问的数据,可以设置较长的过期时间。对于不经常访问的数据,可以设置较短的过期时间。
  • 使用惰性过期:惰性过期是指 Redis 在访问键时才判断键是否过期。惰性过期可以降低 LRU 淘汰对性能的影响。

2.5、使用合适的持久化机制

  • RDB持久化是指定期将Redis内存中的数据快照保存到磁盘上,它的优点是文件紧凑,恢复速度快,适合做备份和灾难恢复。它的缺点是可能会丢失最近一次快照之后的数据,以及在执行快照时会占用一定的CPU和内存资源。
  • AOF持久化是指将Redis执行的每个写操作记录到一个日志文件中,它的优点是数据实时性高,可以保证数据的完整性和一致性。它的缺点是文件较大,恢复速度慢,以及在追加日志时会增加磁盘IO的压力。
  • RDB + AOF:在同一个实例中可以组合 AOF 和 RDB一起使用,也就是我们常说的混合模式。

如果你的业务对数据的实时性要求较高,或者不能容忍数据的丢失,可以选择AOF持久化,或者同时开启RDB和AOF持久化,让AOF优先于RDB恢复数据。如果你的业务对数据的实时性要求不高,或者可以容忍一定的数据丢失,你可以选择RDB持久化,或者关闭持久化,只依赖主从复制来保证数据的可用性。

2.6、使用合理的集群方案

Redis 集群可以有效提升 Redis 的性能。

  • 主从复制模式:主从复制模式是最简单的集群模式。在主从复制模式中,一个节点作为主节点,其他节点作为从节点。主节点负责写入数据,从节点负责读取数据也就是我们说的读写分离。
  • 哨兵模式:哨兵模式是一种高可用的集群模式。在哨兵模式中,每个节点都作为哨兵节点。哨兵节点负责监控主节点的状态,如果主节点发生故障,哨兵节点会自动选举出新的主节点。哨兵模式也适用于读写分离。
  • 集群模式:集群模式是一种负载均衡的集群模式。在集群模式中,每个节点都平等,可以进行写入和读取数据。如果在成本允许的情况下使用此集群模式可以大大的提升Redis的性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1480521.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java的运行机制与Java开发环境的搭建

1.编译和执行 首先通过文本编辑器编写源程序(后缀为.java),再利用编译器编译成字节码文件(后缀为.class),最后利用虚拟机也叫解释器解释执行。 2.JVM、JRE和JDK的区别 简单来说, ①JVM 提供了运行 Java 程…

【HbuilderX】 uniapp实现 android申请权限 和 退出app返回桌面

目录 android申请权限: 监听用户是否开启权限或关闭权限: 退出app返回桌面: android申请权限: 首先在 manifest.json 内添加你所需要用到权限 添加权限插件 permission.js 一次就好1/权限插件 - Gitee.comhttps://gitee.co…

学习和工作的投入产出比(节选)

人工智能统领全文 推荐包含关于投入、产出、过剩、市场关注、案例、结果和避雷等主题的信息: 投入与产出: 投入和产出都有直接和间接两类常见形式。常见的四种组合是:直接投入、直接产出、间接投入、间接产出。 过剩: 过剩是一个重…

农产品质量追溯系统—简介

概要 农产品质量安全事关广大人民群众的食用安全和身体健康。解决农产品质量安全问题,需要从源头开始抓好、抓实农产品安全监管工作。通过建立从产地到市场的全程质量控制系统和追溯制度,对农产品产地环境、生产过程、产品检测、包装盒标识等关键环节进行监督管理,提高广大…

快速开发一个鸿蒙的页面

文章目录 前言常用组件快速开启简单的鸿蒙页面总结 一、前言 鸿蒙要想快速上手,那么就需要对基础的组件使用比较熟悉,这里就罗列开发中常见的基础组件的使用。 只要是写android的,对于这些组件的使用还是能很快上手的,只要多多…

AI智能分析网关V4智慧环保/智慧垃圾站视频智能分析与监控方案

一、背景介绍 随着城市化进程的加速,垃圾处理问题日益受到人们的关注,传统的垃圾站管理方式已经无法满足现代社会的需求。针对当前垃圾站的监管需求,TSINGSEE青犀可基于旗下视频智能检测AI智能分析网关V4与安防监控视频综合管理系统EasyCVR平…

【STM32】江科大STM32学习笔记汇总(50)

00. 目录 文章目录 00. 目录01. STM32学习笔记汇总02. 相关资料下载03. 附录 01. STM32学习笔记汇总 【STM32】STM32学习笔记-课程简介(01) 【STM32】STM32学习笔记-STM32简介(02) 【STM32】STM32学习笔记-软件安装(03) 【STM32】STM32学习笔记-新建工程(04) 【STM32】STM…

十年经验讲解功能测试的一些基本操作以及报告编写

一、 输入框测试 1. 字符型输入框: (1)字符型输入框:英文全半角、数字、空或者空格、特殊字符“~!#¥%……&*?[]{}”特别要注意单引号和&符号。禁止直接输入特殊字符时,使用…

[递归与递推] 栈与卡特兰数

题目背景 栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表。 栈有两种最重要的操作,即 pop(从栈顶弹出一个元素)和 push(将一个元素进栈)。 栈的重要性不言自…

每日一“类“:深入理解Qt的心脏《QObject》

Qt框架以其强大的跨平台能力和丰富的用户界面元素而广受开发者欢迎,而QObject类无疑是Qt框架心脏的所在。本文将深入探讨QObject,揭示其提供的核心功能以及如何在Qt项目中有效利用这个基类。 核心功能 信号与槽 Qt独特的信号与槽机制是其事件通信的基…

【Rust】——结构体struct

🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL&#xff1a…

vue系列——vscode,node.js vue开发环境搭建

第一步安装node.js 推荐使用nvm进行node.js 的安装 nvm(Node.js version manager) 是一个命令行应用,可以协助您快速地 更新、安装、使用、卸载 本机的全局 node.js 版本。 可以去网上查找相关版本 我这里使用 nvm-setu… 链接:https://pan.baidu.com/s/1UEUtmzw5x…

spring事务方法调用不生效的场景

同一个类中&#xff0c;事务方法调用非事务方法时&#xff0c;事务是可以生效的。反例事务不生效见以下 4. 同一个类中&#xff0c;方法内部调用 Autowired private XXXMapper xxxMapper; Autowired private YYYMapper yyyMapper; Transactional public ResultVO<AssetCh…

pag动效预览

潮玩apk里面分析静态资源发现动效有lottie 和pag文件 PAG官网 | PAG动效PAG动效组件可以降低或消除动效相关的研发成本&#xff0c;接入SDK后&#xff0c;设计师可通过PAGExpoter、PAGViewer等工具&#xff0c;一键将设计师在 AE 中制作的动效内容导出成素材文件&#xff0c;并…

【QT 5 +Linux下软件qt软件打包+qt生成软件创建可以安装压缩包+学习他人文章+第三篇:学习打包】

【QT 5 Linux下软件qt软件打包qt生成软件创建可以安装压缩包学习他人文章第三篇&#xff1a;学习打包】 1、前言2、实验环境3、自我学习总结-本篇总结&#xff08;1&#xff09;了解安装包的目录结构&#xff08;2&#xff09;了解要编写文件与编写脚本1. control文件2. postin…

vue3+vite 项目的创建

这里要提醒一下&#xff0c;如果我们要使用 vue3 的组合式api 的写法的话&#xff0c; 那么我们使用的 vue 版本不能低于 vue3.2 版本&#xff0c;不能低于 vue3.2 版本&#xff0c;不能低于 vue3.2 版本 vue2 已停止维护了&#xff0c; 现在全面拥抱vue3 之前用 vue-cli 创建…

鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:图片边框设置)

设置容器组件的图片边框样式。 说明&#xff1a; 从API Version 9开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 borderImage borderImage(value: BorderImageOption) 设置组件的图片边框。 卡片能力&#xff1a; 从API version 9开始…

2.2_4 调度算法的评价指标

文章目录 2.2_4 调度算法的评价指标&#xff08;一&#xff09;CPU利用率&#xff08;二&#xff09;系统吞吐量&#xff08;三&#xff09;周转时间&#xff08;四&#xff09;等待时间&#xff08;五&#xff09;响应时间 总结 2.2_4 调度算法的评价指标 注&#xff1a;要理解…

CentOs的yum报错: except KeyboardInterrupt, e:

1.报错 File “/bin/yum”, line 30 except KeyboardInterrupt, e: ^^^^^^^^^^^^^^^^^^^^ 2.原因&#xff1a;yum需要用python2编译&#xff0c;如果服务器安装的是python3.6并作为默认编译器的话&#xff0c;就会出现这个错误。 3.解决方法&#xff1a;whereis python 4.修改y…

【EI会议征稿通知】第三届新能源、储能与电力工程国际学术会议(NESP 2024)

第三届新能源、储能与电力工程国际学术会议&#xff08;NESP 2024&#xff09; 2024 3rd International Conference on New Energy, Energy Storage and Power Engineering (NESP 2024) 近几十年来&#xff0c;全球能源消耗迅速增加&#xff0c;因此寻找和开发性能优良的环保…