摘要

昨天简单理了理安装与配置相关的
但是很多比较重要的核心性能参数并没有进行学习与探讨
就基于昨天理解不深入的地方进行进一步的学习与了解
希望能够提高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. 从零开始学python | 使用Python映射,过滤和缩减函数:所有您需要知道的

    摘要:在本文中,您将学习Python中的三个令人印象深刻的函数,即map(),filter和reduce(). Python提供了许多预定义的内置函数,最终用户可以通过调用它们来使用它们.这些功能不仅 ...

  2. SAST + SCA: 结合使用安全升级

    据 SAP 称,当今85%的安全攻击针对的是软件应用程序,因此一些列应用程序安全测试工具也应运而生.为了避免这些恶意攻击,企业通常使用应用程序安全测试工具来去缓解和解决安全风险,而不同的工具对应的使用 ...

  3. 火山引擎数智平台VeDI荣获虎啸奖“年度最佳智能营销平台”奖项

    近日,由中国商务协会数字营销专业委员会指导的第十四届虎啸奖正式公布获奖名单,火山引擎数智平台VeDI荣获技术平台/产品类奖项.   作为国内品牌营销领域兼具权威性.前瞻性以及创新性的赛事活动,第十四届 ...

  4. why哥这里有一道Dubbo高频面试题,请查收。

    这是why的第 64 篇原创文章 荒腔走板 大家好,我是 why,欢迎来到我连续周更优质原创文章的第 64 篇.老规矩,先荒腔走板聊聊其他的. 上面这图是我之前拼的一个拼图. 我经常玩拼图,我大概拼了 ...

  5. explain分析

    explain分析字段:id.select_type.type.partitions.type.possible_keys.key.key_len.ref.rows.rows.filtered.ext ...

  6. 如何通过命令部署.Net

    如何通过命令部署.net3.5组件服务 问题:系统安装.net一直报错,无法安装该功能. 问题现象: 终极解决方案: 将windows10系统镜像文件拷贝在硬盘或者U盘中,鼠标右击选择"装载 ...

  7. PS CJ37/CJ38 增加和返回预算

    一.预算补充CJ37/预算返回CJ38 二.补充预算CJ37,点击保存 预算返回CJ38,点击保存 三.代码示例 预算补充代码 "------------------------------ ...

  8. 【JAVA基础】事务管理

    @Transactional 注解的属性介绍 @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.cl ...

  9. .net 温故知新【17】:Asp.Net Core WebAPI 中间件

    一.前言 到这篇文章为止,关于.NET "温故知新"系列的基础知识就完结了,从这一系列的系统回顾和再学习,对于.NET core.ASP.NET CORE又有了一个新的认识. 不光 ...

  10. C#9.0:Init

    背景 在以前的C#版本里面,如果需要定义一个不可修改的的类型的做法一般是:声明为readonly,并设置为只包含get访问器,不包含set访问器.如下: 1 public class PersonIn ...