总结Redis的原理

一、为什么要使用Redis

  • 缓解数据库访问压力
  • mysql读请求进行磁盘I/O速度慢,给数据库加Redis缓存(参考CPU缓存),将数据缓存在内存中,省略了I/O操作

二、Redis数据管理

2.1 redis数据的删除

定时删除+惰性删除+内存淘汰
问题1:内存也是有空间限制的
方案1:加超时时间
问题2:超时数据量大,无法一次性删除
方案2:随机算法删除(惰性删除)
问题3:有些超时数据运气好,一直没有被随机匹配到
方案3:在查询时判断是否过期,确认为过期的数据被动式触发删除
问题4:没有被随机删除也没有被查询的数据越来越多
方案4:内存淘汰策略
在这里插入图片描述

2.2 特殊缓存处理

缓存穿透:查询不存在的数据

方案:缓存空结果null+过期时间

缓存雪崩:大量缓存同时失效(大量不同的请求打到数据库)

方案:原有失效时间上增加随机值,即过期时间均匀分布+热点数据永不过期

缓存击穿:超高并发访问一个正好失效的Key(大量相同的请求打到数据库)

方案:加锁(用户出现大并发访问的时候,在查询缓存的时候和查询数据库的过程加锁,只能第一个进来的请求进行执行,当第一个请求把该数据放进缓存中,接下来的访问就会直接集中缓存)
热点数据永不过期,不设置热点key的失效时间

2.3 热点key

热key:在极短的时间内访问频次非常高的key

2.3.1 如何定位热点key?

提前预测

  • 凭业务经验

实时收集

  • 独立的热key检测系统:将该SDK引入到应用系统
  • 客户端收集:Redis服务器有专门的客户端工具SDK(Redisson),可以对其进行改写封装(理解:二次开发,缺点:代码有入侵性,维护成本高,存在语言异构和版本升级问题),在发送请求前进行收集采集,并上报到统一的服务进行聚合计算。
  • 代理层收集:如果Redis的请求都经过代理的话,考虑改写proxy代码收集
  • Redis定时扫描:使用Redis的自带命令-Hotkeys参数
  • Redis节点抓包:通过tcpdump抓取一段时间内的流量并上报,然后由一个外部的程序去解析并计算(缺点:流量高时抓包数据量过大,负担大)

2.3.2 解决方案

  • 本地缓存(guava cache或caffeine)
    发现热点key后将其加载到JVM中,不用到DB或Redis中查询
    在这里插入图片描述
    理解
    1 请求访问热点key,先经过负载均衡器,到达Nginx集群,
    2 再由Nginx通过负载均衡到达应用网关
    3 网关转发到后端微服务
    4 准备热key检测系统

    • 1 管理后台dashboard:管理热key的规则,如userId,活动id,以及可视化。
    • 2 注册中心:管理分布式服务集群。
    • 3 实时计算程序:根据前端传来的key。
    • 4 SDK:用于接入外部系统。
    • 由注册中心将这4块进行连接互通

    5 计算得到的热key通过SDK传入系统并写入本地缓存
    6 请求访问本地缓存,如果存在热点key,则读取Redis并写入本地缓存,
    7 此时,前端再次访问时就可以直接从本地缓存拿到数据

  • 冗余存储备份key
    设计思想:将热key分成不同的小key(比如key拼接节点ID),存储在不同的Redis节点上,降低数据的倾斜,通过小key分流,分散请求到Redis节点,
    将热点key拼接节点ID,去当前访问的Redis判断是否有值,如果没有则读取数据库,存入Redis并返回数据

  • 限流熔断(兜底方案)
    限流(Nginx-集成lua脚本插件、网关、微服务-hystrix或sentinel对服务接口限流)

三、Redis为什么这么快

  • Redis基于内存,内存的访问速度是磁盘的上千倍
  • Redis内置了多种优化后的数据结构实现,性能高
  • Redis基于reactor模式开发了一套高效的事件处理模型(单线程事件循环,IO多路复用,类似netty网络通信)

四、Redis的备份机制

Redis数据持久化

  • RDB:在指定的时间间隔内生成数据集的时间点快照(理解:数据备份,不同时间段的数据都放在一个RDB文件中)
    问题:数据丢失。如果 Redis 宕机,那么服务器将丢失最近写入、且仍未保存到快照中的那些数据。
  • AOF:(append-only file,追加操作的文件)记录服务器执行的所有写操作命令(理解:参考了MySQL的Binlog日志),命令会暂存在Redis的aof_buf中,从缓存中写入AOF。
    在服务器启动时,通过重新执行这些命令来还原数据集
    问题1:命令多
    方案1:指令合并
    问题2:耗时间
    方案2:fork出子进程进行处理指令合并
    问题3:子进程在重写期间,如果进行了数据修改,就会出现数据不一致
    方案4aof_rewrite_buf,从fork子进程起后面写入的命令也copy到重写缓存区,等子线程重写结束,将重写缓存区的命令写入AOF

五、Redis主从同步

  • 主节点负责写,从节点负责读
  • 当从节点宕机时,主节点发送RDB文件给从节点进行数据同步
  • 为了进行快速同步,主节点中设置缓存区,并设置复制偏移量(目的:确认缺失的信息范围)

六、Redis哨兵机制

在这里插入图片描述

解决主节点宕机问题,实现高可用

  • sentinel哨兵负责统筹协调,监控主节点(定时去确认其响应能力)
  • 哨兵集群(规定数量认定主节点客观下线)
  • 故障转移:选择新的主节点(规则:复制偏移量最大的节点),主节点进行数据同步,将原主节点改为从节点

七、Redis集群

在这里插入图片描述

加入集群:需要和其中一个Redis(IP+端口)建立联系(类似TCP三次握手),Redis原集群内部进行同步确认
数据存储任务分配:槽位slot(类似哈希表),内存空间大的占更多的槽位。

在这里插入图片描述
信息同步:redis节点之间要同步自己所负责的槽位信息
问题1:数据量大,
方案1:每个槽位用1bit表示,自己负责的为1,不负责的为0
在这里插入图片描述
问题2:定位节点麻烦
方案2:用一个超大的数组存储每个槽位,空间换时间

struct clusterNode *slots[16384/8];

集群工作确认请求的位置是不是自己负责,如果不是则返回一个moved错误给请求端,同时发出对应的负责节点的IP和端口

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

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

相关文章

设计定时任务实现数据同步的最佳实践

✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨ 🎈🎈作者主页: 喔的嘛呀🎈🎈 目录 引言 一、选择合适的定时任务框架 Quartz Spring 的 Task…

【MATLAB第98期】基于MATLAB的MonteCarlo蒙特卡罗结合kriging克里金代理模型的全局敏感性分析模型【更新中】

【MATLAB第98期】基于MATLAB的Monte Carlo蒙特卡罗结合kriging克里金代理模型的全局敏感性分析模型【更新中】 PS:因内容涉及较多,所以一时半会更新不完 后期会将相关原理,以及多种功能详细介绍。 麻烦点赞收藏,及时获取更新消息。 引言 在…

如何判断螺栓已经拧紧?——SunTorque智能扭矩系统

智能扭矩系统-智能拧紧系统-扭矩自动控制系统-SunTorque 螺栓拧紧的标准并非仅仅依赖于螺栓的外观,而是依赖于几个关键因素,包括扭矩、预紧力和材料疲劳等。下面SunTorque智能扭矩系统和大家将详细讨论这些因素,并给出如何判断螺栓是否已经拧…

史上最大优惠!腾讯云服务器优惠价格表一年、1个月收费明细

腾讯云服务器多少钱一年?61元一年起,2核2G3M配置,腾讯云2核4G5M轻量应用服务器165元一年、756元3年,4核16G12M服务器32元1个月、312元一年,8核32G22M服务器115元1个月、345元3个月,腾讯云服务器网txyfwq.co…

Linux MBR扇区故障 引导修复

CSDN 成就一亿技术人! 作者主页:点击! Linux专栏:点击! CSDN 成就一亿技术人 前言———— Linux MBR(Master Boot Record,主引导记录)是硬盘的第一个扇区,通常位于磁…

maven项目引入私有jar,并打包到java.jar中

私有jar存放位置 maven依赖 <dependency><groupId>com.hikvision.ga</groupId><artifactId>artemis-http-client</artifactId><version>1.1.10</version><scope>system</scope><systemPath>${project.basedir}/s…

Tomcat常见配置(基础功能、虚拟主机、搭建博客)

目录 一、Tomcat基础功能 1、自动解压war包 2、Tomcat工具界面 2.1 Server Status (服务器状态) 2.1.1 本地登录状态页 2.1.2 远程登录状态页 2.2 Manager App (管理应用程序) 2.3 Host Manager (主机管理器) 3、Context 配置 二、配置虚拟主机 三、搭建 JPress 博客…

支持AUTOSAR Classic以及Adaptive平台的DEXT诊断数据库

一 DEXT、DCM、DEM和FIM的概述 DEXT&#xff08;Diagnostic Extract Template&#xff09;是AUTOSAR定义的诊断提取模板&#xff0c;用于DCM&#xff08;Diagnostics Communication Manager&#xff09;、DEM&#xff08;Diagnostics Event Manager&#xff09;和FIM&#xff…

从新能源汽车行业自动驾驶技术去看AI的发展未来趋势

自动驾驶汽车关键技术主要包括环境感知、精准定位、决策与规划、控制与执行、高精地图与车联网V2X以及自动驾驶汽车测试与验证技术等。 &#x1f413; 自动驾驶技术 这是AI在汽车行业中应用最广泛的领域之一。自动驾驶技术利用AI算法和传感器来感知环境、识别障碍物&#xff0c…

各大厂商常用的弱口令集合

Oms呼叫中心 KXTsoft2010 Glodon控制台 admin TRENDnet趋势网络摄像头 admin/admin MOBOTIX-视频监控 admin/meinsm 思科Cisco 没有原始密码, 第一次登录时需要创建 DRS admin/1234 Honeywell admin/1234 安迅士Axis root/pass, 新安迅士摄像头在用户第一登录时要求创建…

【开源】JAVA+Vue.js实现农家乐订餐系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户2.2 管理员 三、系统展示四、核心代码4.1 查询菜品类型4.2 查询菜品4.3 加购菜品4.4 新增菜品收藏4.5 新增菜品留言 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的农家乐订餐系统&#xff0c…

0基础学习VR全景平台篇第143篇:限定访问功能

大家好&#xff0c;欢迎观看蛙色VR官方——后台使用系列课程&#xff01;这期&#xff0c;我们将为大家介绍如何使用限定访问功能。 一.什么是限定访问功能&#xff1f; 限定访问&#xff0c;就是可以在编辑后台设置可以访问作品的用户的类型&#xff0c;还有可以访问作品的IP…

【leetcode热题】环形链表

难度&#xff1a; 简单通过率&#xff1a; 34.9%题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目描述 给定一个链表&#xff0c;判断链表中是否有环。 为了表示给定链表中的环&#xff0c;我们使用整数 pos 来表示链表尾连接到链表中的位置&#xff08;索…

【CSS】简单的抽屉面板展开收起自然过渡效果的css

目录 效果展示css固定梯形按钮至抽屉面板中间梯形按钮css过渡动画 效果展示 1.收起时点击蓝色梯形按钮展开 2. 展开时点击蓝色按钮收起 3.展开收起时需要过渡自然&#xff0c;有抽屉推拉效果 css 固定梯形按钮至抽屉面板中间 .toggle{ position: absolute;left:-21px;top…

pdf文件超出上传大小怎么压缩?值得学习的几个方法

平时我们在使用pdf文件的时候&#xff0c;不管是上传还是进行存储&#xff0c;都会面临pdf太大的情况&#xff0c;尤其是当我们需要把pdf文件上传到一些平台上去的时候&#xff0c;那么pdf怎么压缩的小一点呢&#xff1f;为了解决这个问题&#xff0c;可以通过一些软件将pdf压缩…

关于并发编程和并行

目录 前言: 并发编程: 1.并发编程的定义: 2. 并发编程的目的 2.1提高性能&#xff1a; 2.2增强响应性&#xff1a; 2.3资源利用&#xff1a; 3. 并发编程的实现方式 3.1多线程&#xff1a; 3.2多进程&#xff1a; 3.3异步编程&#xff1a; 3.4协程&#xff1a; 4. …

【JAVA/Web】数组转对象

一. 需求 数组转对象 数组结构 List:[{id:1,code:phone,value:10101001},{id:2,code:name,value:admin},{id:3,code:address,value:XXXXXX} ]二. 数组转对象&#xff08;键值对映射关系&#xff09; 对象结构 object:{phone:10101001,name:admin,address:XXXXXX }2.1 Java…

桌搭和DIY,或许攒机才能满足宅男们的情绪价值

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 卷圈 运营 / SandLiu 卷圈 监制 / 姝琦 封面 / 姝琦Midjourney 产品统筹 / bobo 场地支持 / 声湃轩北京录音间 最近几年&#xff0c;人们突然对品牌机没有那么感兴趣了&#xff0c;反而重新开始热衷于自己动手攒机。这…

Android14音频进阶:AudioTrack如何拿到AudioFlinger创建的匿名共享内存(六十)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只…

阿里云域名在腾讯云处做接入备案的操作流程

根据注册的相关规定&#xff0c;“谁连接谁负责”&#xff0c;所以你使用的服务器都会向服务器注册。 例如&#xff0c;您在腾讯云上购买了域名并成功注册&#xff0c;但现在切换到阿里云服务器&#xff0c;那么访问注册就必须在阿里云中进行&#xff08;PS&#xff1a;具体请参…