Redis知识点完整补充文档

news2026/3/29 9:22:02
再学习该文档的时候先学习Redis内容https://blog.csdn.net/MC_sir/article/details/159394860?spm1001.2014.3001.5502https://blog.csdn.net/MC_sir/article/details/159394860?spm1001.2014.3001.5502一、基础定义与存储结构补充1. 五大数据结构底层编码面试高频Redis为了节省内存、提升性能针对不同数据量和数据类型采用了不同的底层编码同一种数据结构会有多种编码实现Redis会自动切换String字符串int整型、embstr短字符串优化版、raw长字符串int编码占用内存最小embstr适合长度≤44字节的字符串超过则转为raw编码。List列表ziplist压缩列表、quicklist快速列表Redis3.2后替代ziplistlinkedlist兼顾内存占用和读写效率。Hash哈希ziplist压缩列表字段少、值小、hashtable哈希表字段多、值大。Set集合intset整数集合存纯整数、hashtable哈希表存非整数或元素量大。Zset有序集合ziplist压缩列表元素少、skiplist跳表哈希表元素多保证排序和查询效率。2. 常用批量与进阶命令开发实战Stringmset批量设值、mget批量取值、incr/incrby原子自增计数器专用、decr/decrby原子自减Hashhmset/hmget批量存取字段、hkeys获取所有字段、hvals获取所有值、hlen获取字段个数Listlrange范围查询、lpop/rpop出队、brpop/blpop阻塞式出队避免空轮询做消息队列必备Setsinter交集、sunion并集、sdiff差集、scard统计元素个数Zsetzrangebyscore按分数范围查询、zrank获取排名、zincrby分数自增二、Redis快的原因补充1. 单线程的正确理解纠正误区Redis的单线程仅指网络IO处理和命令执行阶段是单线程并非整个Redis实例只有一个线程。在Redis3.0及以后持久化、异步删除、主从复制数据同步等操作会单独开启后台子线程执行不会阻塞主线程既保证了命令执行无锁竞争又兼顾了后台任务效率。2. IO多路复用底层实现Redis会根据操作系统自动适配最优的IO多路复用模型Linux系统下用epollMac/BSD系统用kqueue普通系统用select/poll通过单线程监听多个套接字的读写事件避免了多线程的上下文切换开销这是Redis高并发低延迟的关键。3. Redis6.0多线程IO进阶Redis6.0引入了多线程处理网络IO读写命令执行依旧保留单线程既解决了高并发下网络IO的性能瓶颈又避免了多线程带来的锁竞争问题大幅提升了高并发写入性能开启需配置io-threads参数。三、缓存三大问题补充实战方案1. 缓存雪崩原有方案基础上补充缓存预热项目启动上线时提前把热点数据加载到Redis中避免冷启动阶段大量请求直接打到数据库同时搭配随机过期时间杜绝大批量key同时过期。2. 缓存穿透原有方案基础上补充接口层参数校验前置拦截非法请求比如id≤0、无效格式的参数从源头杜绝无效查询穿透缓存针对恶意攻击还可搭配接口限流、IP黑名单防护。3. 缓存击穿原有方案基础上补充热点数据永不过期提前预热组合方案针对超高并发的热点key不设置过期时间定时异步更新数据加锁时采用细粒度锁避免大范围阻塞请求影响接口性能。四、持久化机制补充细节生产选型1. RDB持久化补充触发方式分为手动触发和自动触发手动触发用save阻塞主线程生产禁用、bgsave后台fork子进程不阻塞主线程生产推荐自动触发通过配置文件save规则、主从复制、正常关机shutdown触发。2. AOF持久化补充AOF三种刷盘策略兼顾可靠性和性能always每次写入都刷盘数据最安全性能最差everysec每秒刷盘兼顾性能和可靠性生产默认推荐no由操作系统控制刷盘性能最高数据安全性最低AOF重写当AOF文件过大时通过bgrewriteaof命令后台重写压缩冗余命令避免文件无限膨胀不阻塞主线程。3. 混合持久化Redis4.0生产首选结合RDB和AOF的优点重写AOF时先写入RDB全量数据再追加增量AOF命令恢复数据时先加载RDB快速恢复再执行AOF补全数据兼顾恢复速度和数据可靠性。五、过期淘汰策略补充生产选型1. 淘汰策略生产选型allkeys-lru缓存通用场景首选淘汰最少使用的key内存利用率最高volatile-lru只淘汰设置过期时间的key适合需要保留永久数据的场景allkeys-random随机淘汰不推荐使用volatile-ttl淘汰即将过期的keynoeviction不淘汰数据内存满后拒绝写入生产慎用2. 内存配置避坑maxmemory不要设置为物理内存的100%建议设置为50%-70%预留内存给子进程、后台线程和内存碎片防止出现OOM导致服务崩溃。六、高可用/集群方案补充实战细节1. 主从复制补充复制积压缓冲区主节点内存中的固定缓冲区用于保存增量写命令解决网络抖动后的增量复制避免全量重同步支持级联复制从节点可以作为其他从节点的主节点减轻主节点同步压力。2. 哨兵模式补充哨兵采用Raft算法实现选举保证高可用部署数量建议为3、5等奇数quorum配置为半数以上防止脑裂问题哨兵负责监控主从节点、故障自动切换、通知客户端新主节点无需人工干预。3. Cluster集群补充生产最小架构为3主3从共6个节点实现分片存储和故障转移16384个哈希槽均匀分配给主节点支持在线槽迁移、扩容缩容开启slave-read-only可实现集群读写分离分担主节点读压力搭配hash tag可让关联数据落到同一个节点避免跨槽查询。七、分布式锁补充实战坑点1. Redisson常用锁类型开发必备可重入锁RLock支持重复加锁避免死锁公平锁RFairLock保证请求顺序加锁避免线程饥饿读写锁RReadWriteLock读共享、写互斥提升读多写少场景效率红锁RedLock适用于多节点集群保证锁可靠性2. 核心避坑锁续期看门狗机制Redisson自带看门狗默认锁过期时间30s每10s自动续期避免业务执行时间过长导致锁提前释放无需手动设置超长过期时间兼顾安全和效率。3. RedLock争议说明Redlock在极端网络延迟、分区场景下存在锁可靠性问题普通业务场景单机或主从架构搭配Redisson锁足够使用超大规模高可靠分布式场景再考虑RedLock。八、应用场景补充实战场景接口限流基于Redis的zset实现滑动窗口限流、基于incr实现固定窗口限流数据去重利用Set集合sadd命令快速判断数据是否重复延时队列基于Zset的分数排序实现延时任务、订单超时关闭分布式SessionSpring Session整合Redis实现多服务Session共享秒杀扣减利用Redis原子命令实现超高并发下的库存扣减防止超卖九、内存优化补充生产避坑1. 大key处理大key指单个key占用内存过大、包含元素过多比如hash存10w字段、string存几MB数据会导致主线程阻塞、主从同步延迟、内存碎片飙升禁止使用大key拆分大key为多个小key采用unlink异步删除Redis4.0避免del命令阻塞主线程。2. 内存碎片处理内存碎片过高会占用多余内存Redis4.0支持memory defrag命令自动在线整理内存碎片无需重启服务。十、Redis事务补充坑点Redis事务不支持回滚命令入队阶段报错事务不执行执行阶段报错其余命令继续执行官方设计初衷是简化内核、提升性能这类报错多为代码逻辑问题需提前规避。WATCH监控监控指定key若事务执行前key被修改事务放弃执行保证原子性。生产不建议用原生事务复杂业务场景推荐用Lua脚本保证原子性灵活性更高。十一、新增生产实战必备专题贴合博客提升价值1. Redis生产配置优化后台运行daemonize yes关闭危险命令rename-command CONFIG 、rename-command FLUSHDB 内核参数vm.overcommit_memory1防止fork子进程失败开启密码认证禁止外网直接访问2. 监控与问题排查慢查询slowlog get n排查执行过慢的命令大key排查redis-cli --bigkeys热key排查redis-cli --hotkeys常用监控info memory、info clients、info replication3. SpringBoot整合Redis序列化优化禁用JDK默认序列化改用Jackson2JsonRedisSerializer避免乱码、节省内存方便数据查看整合Redisson实现分布式锁、分布式限流。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…