摘要

昨天简单理了理安装与配置相关的
但是很多比较重要的核心性能参数并没有进行学习与探讨
就基于昨天理解不深入的地方进行进一步的学习与了解
希望能够提高Redis-Server的性能.

第一部分: 规范

一切性能都是以代码为核心的.
再好的硬件. 如果代码水平都不行, 肯定是无法发挥硬件的性能.
Redis也是如此.为了能够进行高性能的工作.
Redis的规范也必须严格.
这里简单学习一下阿里云的Redis规范. 总结如下:
1. 键名要有含义,不要太长,不要有乱码.不建议有特殊字符.
2. value不能使用bigkeys. 坚决杜绝
3. 键值对有效期要合理,不要随意设置过长,或者是一致的过期时间.
4. 命令有规律,不要使用太多影响性能的命令.
5. 不要使用危险命令. 注意保证安全与稳定.
6. 设置好最大maxmemory以及maxmemory-policy 等策略. 避免系统宕机.

禁用危险命令的方法

可以在配置文件中执行如下命令进行禁用
rename-command KEYS ""
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""

第二部分: CPU的亲和性

Redis的核心线程只有一个, 所以对CPU的极限性能要求比较高.
昨天的安装测试也能够发现. 虚拟化是会导致CPU实际性能的下降(15%-25%)
如果有超售, 影响可能更加巨大. 所以建议Redis可以尽量使用高主频的物理机器(建议SSD,并且保证稳定性)
因为现在服务器一般是多路架构,并且不少服务器比如AMD和飞腾鲲鹏都是SOC片上就是NUMA节点
所以建议能够在启动时进行一下CPU的亲和性的设置. 在如此建议下. 搞配置的多路服务器的Redis的内存可能不要超过(总内存数/(2*路数)) 的数值
尽量让主线程和后台线程跑再一个NUMA的节点上,速度会有较快的提升.

CPU亲和性的设置

1. 可以使用numactl -s的方式查看 物理服务器的相关信息.
2. 根据以往的经验. 建议关闭 HT 超线程设置. 提高主线程的处理效率.避免不必要的争用.
3. 另外一般网卡处理会根据网卡的数量进行绑定从0开始的CPU.
所以也不建议跟网卡公用CPU,会因为网卡的中断,导致处理性能下降.
4. 如果服务器的每个物理CPU的内存插槽数相同, 通道数一致.那么不建议绑定 0 开头的CPU
建议绑定1之后的CPU. 绑定方法
1. 可以使用taskset -c 的方式进行绑定
2. 可以修改配置文件进行绑定
较新的redis版本比如7.0.7 配置文件中有绑核的设置.
打开相关注释就可以进行绑核了.
#Set redis server/io threads to cpu affinity 0,2,4,6:
server_cpulist 0-7:2
# Set bio threads to cpu affinity 1,3:
bio_cpulist 1,3
# Set aof rewrite child process to cpu affinity 8,9,10,11:
aof_rewrite_cpulist 8-11
# Set bgsave child process to cpu affinity 1,10,11
bgsave_cpulist 1,10-11

第三部分 网络调优

Redis Server其实是一个 Client-Server架构的服务器.
他有极高的网络带宽需求, 所以网络调优必不可少.
1. 网卡中断绑核. 需要专家进行.
2. 网卡流量bond. 有时候一个万兆网卡可能无法满足需求.
建议能够2-4个网卡使用聚合的方式进行提供网络服务.提高承载能力.
3. 上下游交换机.最好使用光纤设备. 如果是电缆,至少为六类超六类.
光纤的延迟和抖动都比较好,能够更好的承载业务.
4. 建议交换机使用冗余配置.并且为高性能专用交换机. 避免网络流量阻塞.
5. 建议针对不同的应用服务器实现限速, 避免一台机器网卡流量暴增阻塞其他服务器.

第四部分 操作系统部分

1. 内核参数调整
backlog 以及 somaxconn 等参数设置, 设置能够承载足够的容量.
2. 内部的TCP参数调优,添加缓存区域.
是否可以使用大MSS或者是MTU,提高网络利用率.
3. 如果使用持久化,建议选用高速度的SSD.
建议选用相同NUMA节点的内存进行处理.
4. 建议选用于对应Redis版本匹配的较高内核版本的Linux系统.
能够发挥更好的redis的性能.
5. 关闭非核心软件,避免资源争用.
建议软件专用, 避免有不可控因素导致性能下降.

第五部分 IO多线程

Redis 6.0 以后的版本增加了 IO多线程的使用

建议如果IO比较多的情况下可以使用IO多线程来提升系统的响应速度.
需要注意,官方不建议这个IO多线程数量太多,
最大值不建议超过8 也不能超过CPU的最多核心数.
极限吞吐量会有所提升,但是有可能会加大核心线程的压力.

第六部分 硬件服务器的选择

1. 主频必须高.
2. 建议缓存也尽量高
3. 内存通道数,工作频率高.
4. 关闭超线程. 核显线程专注操作.
5. 最好使用插拔是网卡,有off_load功能的硬件网卡,避免网络层消耗过多 CPU
6. 建议全闪, 不要使用RAID5 ,RAID 6 写惩罚较大. 建议使用RAID10的RAID机制.
7. 建议开始RAID卡缓存,硬件缓存,并且还是用BBU来保证数据不丢失.
8. 主机使用最高性能模式, 不要使用节能模式,避免性能下降.
9. 内存刷新频率尽量在64ms.不要太低,避免内存充电影响IO

高性能Redis服务器注意事项的更多相关文章

  1. C#客户端Redis服务器的分布式缓存

    介绍 在这篇文章中,我想介绍我知道的一种最紧凑的安装和配置Redis服务器的方式.另外,我想简短地概述一下在.NET / C#客户端下Redis hash(哈希类型)和list(链表)的使用. 在这篇 ...

  2. SSDB:高性能数据库服务器

    SSDB是一个开源的高性能数据库服务器, 使用Google LevelDB作为存储引擎, 支持T级别的数据, 同时支持类似Redis中的zset和hash等数据结构, 在同时需求高性能和大数据的条件下 ...

  3. php的redis 操作类,适用于单台或多台、多组redis服务器操作

    redis 操作类,包括单台或多台.多组redis服务器操作,适用于业务复杂.高性能要求的 php web 应用. redis.php: <?php /* redis 操作类,适用于单台或多台. ...

  4. SSDB是一个开源的高性能数据库服务器

    SSDB是一个开源的高性能数据库服务器, 使用Google LevelDB作为存储引擎, 支持T级别的数据, 同时支持类似Redis中的zset和hash等数据结构, 在同时需求高性能和大数据的条件下 ...

  5. 高性能linux服务器内核调优

    高性能linux服务器内核调优 首先,介绍一下两个命令1.dmesg 打印系统信息.有很多同学们服务器出现问题,看了程序日志,发现没啥有用信息,还是毫无解决头绪,这时候,你就需要查看系统内核抛出的异常 ...

  6. Netty实现高性能IOT服务器(Groza)之精尽代码篇中

    运行环境: JDK 8+ Maven 3.0+ Redis 技术栈: SpringBoot 2.0+ Redis (Lettuce客户端,RedisTemplate模板方法) Netty 4.1+ M ...

  7. .Net下Redis使用注意事项

    .Net下Redis使用注意事项 注:Redis的安装方法和桌面端工具很多,不在本文讨论范围内. 一:不结合适用场景的技术都是耍流氓,Redis主要适用场景: 简单字符串缓存 简单队列 简单发布订阅 ...

  8. 徒手用 Go 写个 Redis 服务器(Godis)

    作者:HDT3213 今天给大家带来的开源项目是 Godis:一个用 Go 语言实现的 Redis 服务器.支持: 5 种数据结构(string.list.hash.set.sortedset) 自动 ...

  9. Netty实现高性能RPC服务器优化篇之消息序列化

    在本人写的前一篇文章中,谈及有关如何利用Netty开发实现,高性能RPC服务器的一些设计思路.设计原理,以及具体的实现方案(具体参见:谈谈如何使用Netty开发实现高性能的RPC服务器).在文章的最后 ...

  10. Redis——学习之路二(初识redis服务器命令)

    上一章我们已经知道了如果启动redis服务器,现在我们来学习一下,以及如何用客户端连接服务器.接下来我们来学习一下查看操作服务器的命令. 服务器命令: 1.info——当前redis服务器信息   s ...

随机推荐

  1. ModelBox姿态匹配:抖抖手动动脚勤做深呼吸

    摘要:本案例使用Windows版本的ModelBox SDK进行二次开发,主要是针对姿态匹配案例开发实践. 本文分享自华为云社区<姿态匹配:抖抖手动动脚勤做深呼吸>,作者:吴小鱼. 在之前 ...

  2. 消除数据孤岛,华为云DRS让一汽红旗ERP系统数据活起来

    摘要:拒绝延时,华为云DRS实现一汽红旗ERP系统数据实时同步. 本文分享自华为云社区<消除数据孤岛,华为云DRS让一汽红旗ERP系统数据活起来>,原文作者:心机胖. 数字化时代,数据成为 ...

  3. vue-grid-layout数据可视化图表面板优化过程所遇问题汇总

    对于drag事件不熟悉的,请先阅读:<drag事件详解:html5鼠标拖动排序及resize实现方案分析及实践> 之前老项目grafana面板,如下图所示(GEM添加图表是直接到图表编辑, ...

  4. 聊聊Hive数据血缘——从Atlas没有列级血缘的Bug讲起

    前几天,Datahub提供了最新的字段级别数据血缘功能,很多朋友迫不及待想对比一下Datahub的字段级血缘与Atlas的区别. 这个时候问题来了,在Atlas收集Hive血缘的时候,由于部分版本问题 ...

  5. 一文读懂火山引擎A/B测试的实验类型(3)——多链接实验

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 一. 概述 多链接实验,也称为Split url实验,用户根据分流结果访问不同版本的url. 举个例子: 当您有两 ...

  6. 一文了解 DataLeap 中的 Notebook

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 概述 Notebook 是一种支持 REPL 模式的开发环境.所谓「REPL」,即「读取-求值-输出」循环:输入一 ...

  7. MySQL Select 语句执行顺序

    一条 SQL 查询语句结构如下: SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN ...

  8. C99标准前后对于二维数组的动态声明问题

    html: toc: true 写在前面: 出于作者不了解C99以前标准中对二维数组的动态声明而导致的一场考场事故,作者写下这篇文章,,以便其他同学在遇到类似问题时不要犯同样的错误,同时作为对自己的警 ...

  9. 【python爬虫】bs4遍历、搜索文档树 bs4使用css选择器 selenium基本使用 selenium查找标签 selenium执行js代码

    目录 上节回顾 今日内容 0 bs4遍历文档树 1 bs4搜索文档树 1.1 find方法的其他参数 2 css选择器 3 selenium基本使用 4 无界面浏览器 4.1 模拟登录百度 5 sel ...

  10. GitLab--简单使用

    1 创建项目组 项目组说明 Private 私有 只有所有者 组内成员或已分配的用户有查看权限(同GitHub收费版的私有仓库) Internal 内部 拥有GitLab账号的成员可以查看 无账号用户 ...