【Redis】单线程理解及可能影响性能的操作

一. Redis的单线程

  1. 说明:Redis单线程主要是指【网络IO】和【键值对读写】操作是由一个线程来完成的
  2. 原因:避免多线程的并发控制问题及线程间的上下文切换
  3. QPS:10w级别QPS处理能力,因为大部分操作都在内存上,且采用了高效的数据结构
  4. 基于多路复用的Redis高性能IO模型

【Redis】单线程理解及可能影响性能的操作

二. 可能影响单线程性能的操作

1. bigKey操作

bigKey会导致网络传输、读写操作、内存消耗都变大

2. 复杂命令

复杂命令操作时间长,阻塞主线程

禁用:KEYS(使用SCAN命令代替)/FLUSHALL/FLUSHDB

SORT/SUNION/ZUNIONSTORE

3. 大量key集中过期

a.) Redis的过期机制也是在主线程中执行的,大量key集中过期会触发主动删除key策略

b.) 主动删除key策略

【Redis】单线程理解及可能影响性能的操作

4. 淘汰策略

  1. 淘汰策略也是在主线程执行的,当内存超过Redis的 maxMemory 上限后,每次写入都会执行淘汰策略
  2. 淘汰策略
    【Redis】单线程理解及可能影响性能的操作

5. 主从全量同步生成RDB

主从同步虽然采用fork子进程生成数据快照,但fork这一瞬间也会阻塞主线程,实例内存越大,阻塞时间越久

6. AOF刷盘开启always机制

每次写入都需要刷盘,写入硬盘的速度远比写内存慢,会拖慢Redis的性能

三. 使用规范

  1. key 的长度尽量短,节省内存空间(长度越长,额外需要内存就越大)
  2. 避免 bigkey,防止阻塞主线程
  3. 批量操作建议 MGET/MSET 替代 GET/SET,HMGET/HMSET 替代 HGET/HSET
  4. 禁止使用 KEYS/FLUSHALL/FLUSHDB 命令
  5. 避免集中过期 key
  6. 使用连接池操作 Redis,并设置合理的参数,避免短连接
  7. 读请求量很大时,建议读写分离,写请求量很大,建议使用切片集群
  8. 实例设置最大连接数,防止过多客户端连接导致实例负载过高,影响性能
  9. 单个实例内存建议控制在 10G 以下,大实例在主从全量同步、备份时有阻塞风险
  10. 设置合理的 repl-backlog,降低主从全量同步的概率
  11. 设置合理的 slave client-output-buffer-limit,避免主从复制中断情况发生
  12. 推荐在从节点上备份,不影响主节点性能
  13. 不开启 AOF 或开启 AOF 配置为每秒刷盘,避免磁盘 IO 拖慢 Redis 性能

Original: https://www.cnblogs.com/gossip/p/15740114.html
Author: 扯
Title: 【Redis】单线程理解及可能影响性能的操作

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/528888/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Linux 0.11源码阅读笔记-内存管理

    内存管理 Linux内核使用段页式内存管理方式。 内存池 物理页:物理空闲内存被划分为固定大小(4k)的页 内存池:所有空闲的物理页面形成一个内存池,并逐页分配和回收。并通过位图记…

    Linux 2023年5月27日
    099
  • JAVA设计模式-建造者模式

    JAVA设计模式-建造者模式 介绍 建造者模式是通过一步一步的步骤构建一个包含多个部件的对象,每个不同的对象都是具有相同的构建过程。适用于复杂对象的构建,用户不需要知道具体的构建细…

    Linux 2023年6月6日
    096
  • NJU软件分析笔记(3)

    NJU Static Analysis Notes(3)——Data Flow Analysis Ⅱ 课程链接本次课程主要内容 Live Variables Analysis Av…

    Linux 2023年6月8日
    0123
  • 【转】我是一个CPU:这个世界慢!死!了!

    简介 我经常听到人们说磁盘慢,网络很慢,这是从人类感知的角度来表达的。比如,把一个文件拷贝到硬盘上需要几分钟到几十分钟,足够我吃一顿饭;而从网上下载一部电影,有时需要几个小时,我可…

    Linux 2023年5月27日
    0100
  • CSAPP 之 BombLab 详解

    前言 本篇博客将会展示 CSAPP 之 BombLab 的拆弹过程,粉碎 Dr.Evil 的邪恶阴谋。Dr.Evil 总共设置了 6 个炸弹,每个炸弹对应一串字符串,如果字符串错误…

    Linux 2023年6月7日
    091
  • Redis配置参数详解

    Redis是一个应用非常广泛的高性能Key-Value型数据库,与memcached类似,但功能更加强大!本文将按照不同功能模块的方式,依次对各个功能模块的配置参数进行详细介绍。 …

    Linux 2023年5月28日
    089
  • ES6

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> &lt…

    Linux 2023年6月13日
    093
  • 实验一 密码引擎-4-国䀄算法交叉测试

    任务详情 0 2人一组,创建一个文件,文件名为小组成员学号,内容为小组成员学号和姓名1 在Ubuntu中使用OpenSSL用SM4算法加密上述文件,然后用龙脉eKey解密,提交代码…

    Linux 2023年6月8日
    0100
  • Linux防火墙——iptables简介

    一、防火墙相关概念 这里描述了一些相关的概念。 [En] Some related concepts are described here. 从逻辑上讲,防火墙可以分为主机防火墙和…

    Linux 2023年5月27日
    0104
  • shell 变量的默认值

    在 shell 脚本中,如果要使用某个变量又想给它设置默认值,可以用 XX=${YY-ZZ} 的方式,其中 ZZ 会是 YY 没有设置时的默认值 另一种用法是 XX=${YY:-Z…

    Linux 2023年5月28日
    0107
  • 基于Swoole和Redis实现的并发队列处理系统

    由于PHP不支持多线程,但是作为一个完善的系统,有很多操作都是需要异步完成的。为了完成这些异步操作,我们做了一个基于Redis队列任务系统。 大家知道,一个消息队列处理系统主要分为…

    Linux 2023年5月28日
    094
  • 智能指针

    RAII(Resource Acquisition Is Initialization)是一种利用对象生命周期来控制程序资源(如内 存、文件句柄、网络连接、互斥量等等)的简单技术。…

    Linux 2023年6月13日
    079
  • python3安装pyhook3遇到的问题

    一、 解决办法:安装好:使用C++的桌面开发即可完成。 打开官方网址:Visual Studio: 面向软件开发人员和 Teams 的 IDE 和代码编辑器 (microsoft….

    Linux 2023年6月13日
    0107
  • python学习

    python中的字符串以双引号或者单引号表示 长度为L:第一个字节索引为0或-L 最后一个字节索引为L-1或-1 in是二元关系操作,用来判断左侧内容是否在右侧的集合中 float…

    Linux 2023年6月6日
    0103
  • 教你搞懂Jenkins安装部署!

    前言:请各大网友尊重本人原创知识分享,谨记本人博客: 南国以南i Jenkins介绍 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作…

    Linux 2023年6月14日
    0126
  • js打印前几天或后几天的日期

    创作对你我有价值的,喜欢交朋友,失忆王子,期待与你共同探讨,技术qq群153039807 Original: https://www.cnblogs.com/hshanghai/p…

    Linux 2023年6月13日
    0106
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球