前言

关于redis,可由应用维度、系统维度来进行了解。

如下所示:

redis在缓存应用发挥着重要作用,不知道你有没思考过Redis为什么这么快?

1、纯内存访问

为什么内存访问比磁盘访问更快,可参考:

操作系统的内核态和用户态场景-CSDN博客https://blog.csdn.net/weixin_50055999/article/details/148189950?spm=1011.2415.3001.5331

2、单线程避免上下文切换

关于I/O多路复用,可参考:关于多线程的Redis模型_redis线程模型-CSDN博客https://blog.csdn.net/weixin_50055999/article/details/147977886?spm=1011.2415.3001.5331

3、渐进式ReHash、缓存时间戳


1、渐进式ReHash

1.1、全局哈希表

        为了实现快速根据键访问到值,Redis使用了一个全局哈希表来存储所有的键值对

一个哈希表其实就是一个数组,数组的每个元素称为一个哈希桶。

如下图所示:

1.2、核心流程

1、扩、缩容触发条件

  • 扩容:当哈希表的负载因子(键数量/桶数量)超过阈值(默认 1.0,且无后台保存任务;或 5.0,若有后台保存任务)时触发。
  • 缩容:当负载因子过低(如低于 0.1)时触发,以节省内存。

如下图所示:

2、核心机制:

Redis 维护两个哈希表:ht[0](旧表) ht[1](新表)

1、当触发 ReHash 时,Redis 创建一个更大的(或更小的)新哈希表 ht[1],并将数据从 ht[0] 逐步迁移到 ht[1]。
2、迁移过程通过 渐进式操作 分摊到每次读写操作中,而不是一次性完成
3、Redis 使用一个 rehashidx 指针记录当前迁移的桶(bucket)位置,逐步将 ht[0] 的桶迁移到 ht[1]。
4、迁移期间,Redis 会同时查询 ht[0] 和 ht[1],确保数据访问无中断。
5、迁移完成后,ht[1] 成为新的主哈希表,ht[0] 被清空并释放

1.3、示例场景


假设 Redis 存储了一个包含 100 万键的哈希表:

1、一次性 ReHash:

        需要一次性将 100 万键重新计算哈希并迁移,可能导致数百毫秒甚至秒级的阻塞。


2、渐进式 ReHash:

        每次操作迁移 1-10 个键,100 万键分摊到多次操作中,可能只需几秒到几十秒完成,单次操作延迟仅增加微秒级。

1.4、注意事项


1、ReHash 性能影响:

        虽然渐进式 ReHash 极大降低了阻塞风险,但在极端高并发场景下,频繁触发 ReHash 可能仍会带来轻微性能波动。


2、监控 ReHash:

        通过 INFO MEMORY 命令查看 rehashidx 值,判断是否正在进行 ReHash(非 -1 表示进行中)。


3、优化策略:

        合理设置初始哈希表大小或负载因子阈值(通过 hash-max-ziplist-entries 或 activerehashing 配置),减少不必要的 ReHash。


2、缓存时间戳

2.1、使用原因

redis 为什么要缓存系统时间戳?


        平时使用系统时间戳时,都是直接调用系统函数(涉及到用户态和内核态线程的上下文切换) 直接获取时间戳。redis 不是这样的。因为 每一次获取系统时间戳都 一次系统调用。相对耗时。作为 高性能的 redis是承受不起的。

        redis采用定时任务来获取系统时间 每毫秒更新一次,需要获取时间戳直接从缓存中拿。

2.2、Redis缓存过期机制


1、惰性删除:


        惰性删除是指 Redis 只有在访问一个键(比如 GET、SET 等操作)时,才会检查该键是否已过期。如果键已过期,Redis 会立即删除该键,并返回空(对客户端来说就像键不存在)

优点:

        节省 CPU 资源,只有在必要时才执行删除操作。
        适合访问频率较高的场景,过期键能被及时清理。


缺点:

        如果某些键长期不被访问,过期键可能占用内存,直到被定期删除或其他机制清理。


2、定期删除: 

        Redis 会定期(后台)扫描数据库中的键,随机抽样检查部分键的过期状态,并删除已过期的键。

优点:

        能清理不常访问的过期键,防止内存浪费。
        扫描是分批进行的,不会一次性占用过多 CPU。


缺点:

        随机抽样可能漏掉一些过期键,导致内存清理不彻底。
        高负载下,定期删除可能不够及时。


扩展点

redis 6.0 之前为什么一直不使用多线程?

  1. 在使用redis 过程中 cpu 一直不是瓶颈。受制于 内存网络
  2. 提高Redis, Pipeline(命令批量处理)  每秒 100万请求
  3. 单线程内部维护简便 高效

参考文章:

1、redis高阶2 高性能-CSDN博客https://blog.csdn.net/nicepainkiller/article/details/147308857?ops_request_misc=&request_id=&biz_id=102&utm_term=Redis%E7%9A%84%E6%B8%90%E8%BF%9B%E5%BC%8Fhash%E5%92%8C%E7%BC%93%E5%AD%98%E6%97%B6%E9%97%B4%E6%88%B3&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-147308857.142^v102^pc_search_result_base1&spm=1018.2226.3001.4187

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

视频续播功能实现 - 断点续看从前端到 Spring Boot 后端

🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Micro麦可乐的博客 🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战 🌺《RabbitMQ》…

【工具】Linux 中 find 命令使用教程

find 命令是 Linux 系统中最强大、最灵活的文件搜索工具,其能力远超简单的文件名匹配。掌握 find 能让你在复杂的文件系统中精准定位目标,实现高效的文件管理。 一、命令结构与核心概念 find [起始路径] [选项] [表达式]起始路径:搜索的根目…

0629-

0629 0629操作3. 权限 0629 操作 进入数据库 mysql -uroot -proot123 .use idatabase; select * from customer; 2.select distinct name,idnum from customer; 3.UPDATE customer SET idnum left(MD5(idnum),16); 4. UPDATE customer SET phone CONCAT( LEFT(p…

JVM调优实战 Day 6:JVM性能监控工具实战

【JVM调优实战 Day 6】JVM性能监控工具实战 文章简述 在Java应用的性能优化过程中,JVM性能监控工具是不可或缺的“眼睛”。它们能够帮助开发者实时掌握系统运行状态,识别性能瓶颈,并为后续调优提供数据支撑。本文作为“JVM调优实战”系列的第…

【嘉立创EDA】PCB 如何按板框轮廓进行铺铜

文章路标👉 :one: 文章解决问题:two: 主题内容:three: 参考方法be end..1️⃣ 文章解决问题 操作环境:嘉立创EDA专业版 V2.2.40 本文使用嘉立创EDA,描述如何在PCB设计时,直接使用板框轮廓进行铺铜。本文将此过程记录,以供有需要的读者参考。 2️⃣ 主题内容 在PCB设计…

dockerfile命令及构建

一,dockerfile常用命令 命令介绍FROM–指定基础镜像LABEL作者信息USER切换运行属主身份WORKDUR切换工作目录ENV用于docker容器设置环境变量RUN用来执行命令行的命令COPY把宿主机文件复制到镜像中去ADD将文件路径复制添加到容器内部路径EXPOSE为容器打开指定要监听的…

uniApp实战四:网络请求封装

文章目录 1.最终效果预览2.请求封装3.创建config配置文件4.创建api请求5.页面调用 说明:当前笔记基于Vue3开发,HbuilderX版本4.66 1.最终效果预览 2.请求封装 在util/request.js下创建js文件,代码如下 import config from /configconst tim…

MCP协议全解:大模型时代的能力开放与服务集成最佳实践

一、MCP协议是什么? MCP(Model Context Protocol,模型上下文协议)是大模型和多智能体(Agent)生态中,用于标准化描述和传递上下文信息、能力开放、服务集成的协议。它的目标是让不同模型、Agent…

oracle 返回最新记录

在Oracle数据库中,如果你想获取一个表中基于某些条件的最新记录,通常有两种常见的方法:使用ROWID或者使用带有ORDER BY和ROWNUM的子查询。下面我将介绍这两种方法的基本用法。 方法1:使用ROWID 如果你的表有一个时间戳字段或者递…

华为云服务器:Can’t connect to MySql server on ‘localhost’(10060)

本地远程连接服务器数据库,提示10060 在 Ubuntu/Debian 系统中,检查 3306 端口是否开启需要从两个方面验证:MySQL 服务是否监听该端口以及防火墙是否允许外部访问该端口。以下是具体步骤: sudo ufw status查看到为开启mysql端口 …

利用Percona XtraDB Cluster搭建MySql高可用集群

引言拉取镜像创建单节点实例(一般在测试环境中使用)自定义网络(集群间相互隔离)映射数据目录创建docker-compose PXC容器用docker-compose启动PXC集群集群验证数据库负载均衡的必要性Haproxy负载均衡器部署故障排查引言 告别单点故障,拥抱持续可用——构建基于 Percona X…

Leetcode 3592. Inverse Coin Change

Leetcode 3592. Inverse Coin Change 1. 解题思路2. 代码实现 题目链接:3592. Inverse Coin Change 1. 解题思路 这一题的话思路上我们走的是一个贪婪算法的思路,即从小到大依次考察,显然,每一次当前最小的非零面额有且必有当前…

打造属于你的AI智能体,从数据开始 —— 使用 Bright Data MCP+Trae快速构建垂直智能体

一、AI智能体的机遇与挑战 最近这两年全民AI热潮开始,各种智能体应用层出不穷。在AI智能体火热的当下,越来越多开发者想要构建自己的智能体,特别是垂直领域,需求更是旺盛。比如招聘助手、电商导购、财经分析师等等。从技术角度来…

嵌入式自学四十八天

时钟 cpu528MHz, PLL:锁相环电路 倍频功能:Fin*n Fout Prescale: 预分频器 降频 Fin/m Fout PFD:相位分子分频器 Fin *n/m Fout 时钟开了后,先到时钟根产生器,对时钟频率更改&…

光谱相机应对复杂环境条件的关键技术与方案

一、极端温度适应性‌ ‌主动温控系统‌ ‌半导体冷却(TEC)‌:维持探测器在5-40℃工作区间,防止高温噪声(如SPECIM FX17)。 ‌散热结构‌:铝合金外壳散热鳍片,工业级相机可在-10℃…

个人技术文档库构建实践:基于Cursor和GitHub的知识管理系统(含cursor rules)

技术选型 核心工具链 Cursor编辑器:AI辅助写作,智能补全和结构优化GitHub:版本控制、跨设备同步、团队协作Markdown:轻量级格式,跨平台兼容,与Git完美集成 与主流工具对比 选择CursorGitHub适合&#xf…

烟花爆竹生产企业库房存储安全风险预警系统

烟花爆竹生产企业库房存储安全风险预警系统是保障库房物资安全、规范作业流程、防范安全事故的重要技术手段,涵盖多个关键预警功能。​ 温湿度预警​ 在库房内安装温湿度传感器,这些传感器如同敏锐的“环境感知员”,能够实时监测库房内环境变…

LINUX 625 DNS域名管理系统

建安错题 根据《安全色》,红、黄、蓝、绿四种安全色各自传递着不同的安全含义和信息,其中表示要求人们必须遵守的规定的颜色是()。 根据《安全色》国家标准(GB 2893-2008),四种安全色的含义如下: ​​红色​​&#…

FastMCP框架进行MCP开发:(三)从SSE升级到SteamableHTTP

一、前言 在MCP(Model Context Protocol)中,Streamable HTTP和SSE(Server-Sent Events)都是用于实现客户端与服务器之间通信的传输机制。然而,它们在设计、功能以及性能表现上有着显著的区别。 二、SSE在…

Android 15 变更及适配攻略

2025年的第一篇Android适配,比以往来的更晚一些。废话不多说,我们开始!! 准备工作 首先将我们项目中的 targetSdk和compileSdk 升至 35。 推荐使用Android Studio Koala Feature Drop | 2024.1.2或更高版本。AGP版本最低升级到…