【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)

大家都在看

  • 实现Django ORM admin view中model字段choices取值自动更新的一种方法

    有两个表,一个是记录网站信息的site表,结构如下: CREATE TABLE site ( id bigint(20) unsigned NOT NULL AUTO_INCREM…

    Linux 2023年6月6日
    094
  • Redis的数据时如何避免丢失的?

    Redis之所以足够快,一部分的原因是它的数据都是基于内存存储的。虽然Redis更多的是作为一个旁路缓存【先在redis中查询,查询不到数据的时候,在查询持久化数据库】来使用。如果…

    Linux 2023年6月7日
    072
  • springboot2 整合 redis 并通过 aop 实现自定义注解

    1,相关依赖 pom.xml 片段 org.springframework.boot spring-boot-starter-aop org.springframework.boo…

    Linux 2023年5月28日
    093
  • 设置Docker的默认文件存储位置

    对于windows下,直接修改docker desktop界面的配置项目。对于rocky linux下面,对应的配置文件存储在: vim /etc/docker/daemon.js…

    Linux 2023年6月6日
    064
  • nginx配置文件讲解及示例(可复制)

    【示例一】 运行用户 user www-data; 启动进程,通常设置成和cpu的数量相等 worker_processes 1; 全局错误日志及PID文件 error_log /…

    Linux 2023年6月6日
    070
  • rsync

    rsync是什么 rsync特性 1)可以镜像保存整个目录树和文件系统。 2)可以很容易做到保持原来文件的权限、时间、软硬连接等。 3)无需特殊权限即可安装。 4)快速:第一次同步…

    Linux 2023年6月6日
    084
  • shell实现group by聚合操作统计

    在sql中,我们可以方便的使用group by及相应的聚合函数如sum avg count来实现分组统计需求,那当我们面对一个文本,在shell中也可以实现相应的功能吗? 在she…

    Linux 2023年5月28日
    0116
  • 2020年12月-第02阶段-前端基础-CSS Day04

    浮动(float) *记忆 能够说出 CSS 的布局的三种机制 *理解 能够说出普通流在布局中的特点能够说出我们为什么用浮动能够说出我们为什么要清除浮动 *应用 能够利用浮动完成导…

    Linux 2023年6月8日
    073
  • Linux进程调度器

    完全公平调度器 用黑体标出的是文章的主线,未用黑体标出的内容是对黑体内容的解释或注解。 每次调用调度器时,它会挑选具有最高等待时间的进程,把CPU提供给该进程。如果经常发生这种情况…

    Linux 2023年6月13日
    080
  • CH9344 Windows驱动安装与GPIO使用教程

    USB 转四串口芯片 CH9344 用于为 USB 主机扩展 4 路高速异步串口,支持串口波特率高达 12Mbps。芯片内部高度集成,外围精简,提供 VIO 电源引脚,部分串口 I…

    Linux 2023年6月7日
    076
  • Linux 0.11源码阅读笔记-总结

    Linux 0.11主要包含文件管理和进程管理两个部分。进程管理包括内存管理、进程管理、进程间通信模块。文件管理包含磁盘文件系统,打开文件内存数据。磁盘文件系统包括空闲磁盘块管理,…

    Linux 2023年5月27日
    074
  • 了解CFS完全公平调度器

    CFS模拟理想多任务调度 公平,即对于n个正在运行的任务,当这些任务同时不断地运行时,CPU会尽可能分配给他们1/n的处理时间。 CFS是一种基于加权公平排队思想的调度算法。 精确…

    Linux 2023年6月7日
    091
  • redis报错OOM command not allowed when used memory > ‘maxmemory’

    登录到redis上查询 ./redis-cli -h IP -p port -a passwdredis>info memory 查询,内存已耗尽 查询配置文件,发现之前配置…

    Linux 2023年5月28日
    084
  • 复古冰雪传奇H5游戏详细图文架设教程

    前言 想体验复古传奇的热血PK吗?想体验满级VIP的尊贵吗?想体验一刀99999的爽快吗?各种极品炫酷时装、坐骑、翅膀、宠物通通给你,就在复古冰雪传奇H5! 本文讲解冰雪传奇架设教…

    Linux 2023年6月7日
    0100
  • 内存错误和服务器内存RAS功能-DELL篇-1

    简介 内存子系统错误是现代计算系统中最常见的一些错误类型。了解内存错误是如何发生的以及如何预防或避免它们可能是一个复杂的话题–在过去30年里,这个话题挑战了无数的行业研…

    Linux 2023年6月7日
    0125
  • ASP.NET Core 3.0 : 二十八. 在Docker中的部署以及docker-compose的使用

    本文简要说一下ASP.NET Core 在Docker中部署以及docker-compose的使用 (ASP.NET Core 系列目录)。 系统环境为CentOS 8 。 一、概…

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