redis瘦身版
线程模型
纯内存操作/非阻塞io多路复用/单线程避免多线程频繁上下文切换
基于Reactor模式开发了网络事件处理器:文件事件处理器,单线程的 io多路监听多个socket,据socket事件类型选择对应的处理器,高性能网络通信模型,可其他单线程对接 简单性
文件事件处理器:多个socket io多路复用 文件事件分派器 事件处理器
io多路复用监听多个socket,将socket放入队列排队,每次从队列中取出socket给事件分派器,给对应事件处理器,处理完,io多路复用将队列下一个socket给事件分派器
reactor
synchronous event demultiplexer:同步事件分离器,监听各种事件,调用方调用监听方法的时候会被阻塞 直到有事件发生
handler:文件描述符,简单理解一个一个事件
event handler:事件处理器,回调方法,事件发生 据handler调用对应的回调方法 自己实现方法
步骤:
高可用:
主从
哨兵:sentinel: 集群监控 消息通知 故障转移 配置中心
redis cluster :livu livechat中使用了
人家有槽slot 16384个呢 请求发送任意节点 该节点会将请求发送到正确节点上-相亲相爱
1.哈希的方式,将数据分片 每个节点均分存储一定哈希槽区间的数据
2.每份数据分片会存储在多个互为主从的多节点上
3.先写主节点再同步从节点
4.读取数据,当客户端操作的key没有分配在该节点,返回转向指令,指向正确节点
5.扩容时需要把旧节点的数据迁移一部分到新节点
6.每个redis放开两个端口,6379 16379,16379节点间通信,cluster bus,故障检测/转移
7.cluster bus用gossip二进制协议,节点间高效数据交换,占用更少的网络带宽和处理时间
优缺点:谁还能没点缺
无中心架构,支持动态扩容,对业务透明
自备sentinel监控和自动failover故障转移能力
高性能,直连redis服务 免去proxy损耗
有点缺:人无完人 redis无完美 怎么说:反正有缺点但是值得
运维复杂 数据迁移需要人工 只能使用0号数据库 不支持批量操作 分布式逻辑和存储模块耦合
redis sharding:你可以不看 让我自己卷
多redis实例集群,采用哈希算法将redis的key进行散列,映射到特定的redis节点
简单,服务端redis实例彼此独立,相互无关联,每个redis实例像单服务器一样 线性扩展
不支持动态删增节点,服务器redis实例群拓扑结构变化,每个客户更新调整 连接不共享
三大热门问题:
还行 咱家项目设计稳稳当当 上学的时候遇到过一次
缓存穿透:缓存 数据库都没有的数据,库短时间内承受大量请求
接口层校验,缓存取不到库中也没有,可key-null 短的过期时间,布隆过滤器bitmap中
缓存击穿:缓存中没有库中有,并发查同一条数据
热点永不过期,互斥锁
缓存雪崩:一瞬间大面积失效
设置随机过期时间/新增缓存标记是否失效/缓存预热/互斥锁
一致性:
写不太频繁:
1,操作缓存 设置过期标识 客户端读缓存过期则休眠再查redis
2,先删缓存,看他不顺眼直接删了!再写数据库,休眠 再删缓存
主从同步
1 从节点slaveof masterip port 保存主节点信息
2 从节点定时任务发现主节点,建立和主节点socket连接
3 从发送信号 主返回 互相私通 呸 互相私信,连接建立 主all数据发送给从
runid:每个redis节点启动生成唯一标识uuid
offset:主从各自维护自己的复制偏移量,主也写offset=offset+命令字节长度,从收到主发送命令后,增加自己的offset,把自己的offset发送给主节点,主节点同时保存自己的offset和从的,对比判断主从一致性数据
原理
repl_backlog_size:主节点上固定长度的先进先出队列1M
复制
全量复制:主节点bgsave命令fork子进程 rdb,消耗cpu 内存 硬盘id,主节点通网络rdb给从,从清空老数据 载入rdb(阻塞)
部分复制:执行复制的双方,分别维护offset,主内部维护固长 fifo复制积压缓存区队列,主offset差距大过缓存区长度,全量复制;服务器runid 主把自己的runid发送给从 从存 从重连时 据runid判断同步进度
runid同之前同步过 主尝试部分复制 ;不同全量复制
事务ACISD
单线程 watch监控key的情况
1,multi命令的执行(事务的开始),multi将客户端状态的flags=redis_multi
2,命令multi/exec/watch/discard会立即执行,否则将命令放入事务队列 客户端返回queue
其他命令 先检查格式 如果说来捣乱 服务器把客户端状态flags关闭redis_multi 返回错误 小黑屋了
队列说FIFO 先进先出讲规矩的队列
3,执行:
不支持回滚;
watch乐观锁为redis提供check-and-set(cas)监控多个键,有一个被修改则后面的事务不执行 监控持续到exec命令
multi开启事务,执行后客户端可持续向服务器发送任意多条命令,放入队列 exec被调 all命令执行
exec 执行事务块内命令,按命令执行先后顺序排列,操作被打断 返回空值null
调用discard客户端可清空事务队列,放弃执行事务
unwatch取消watch对所有key对监控
分布式锁
setnx+setex 设置超时时间失败,死锁
set(key,value,px)原子操作
redisson解决任务超时 锁自动释放 并发问题
数据结构
string
list
hash
set
sortedSet
bitmap
geohash:sortedSet
hyperLogLog
streams
缓存过期策略
定期过期:定时器清理 占大量CPU处理过期数据 缓存响应时间和吞吐量
惰性过期:先判断是否过期,过期删除,节省CPU资源 消耗内存
定期过期:每隔一段时间,扫描一定数量的数据库中expires字典中一定数量的key
淘汰算法
fifo:被存储时间 最远的先淘汰
LRU:最近最少使用,最近被使用的时间
LFU:最不经常使用,一段时间内 缓存被使用次数最少
缓存方案:
客户端缓存:页面 浏览器缓存 app h5 localStorage sessionStorage
CND缓存:内容存储 数据缓存 内容分发 负载均衡
nginx缓存:静态资源
服务端缓存:本地缓存 外部缓存
数据库缓存:持久层缓存 mybatis。hibernate多级缓存 mysql查询
操作系统缓存:page cache。 buffer cache
redis集群策略
主从:主可写读,和从数据同步,主从宕 客户端手动修改ip
哨兵模式:主库宕 哨兵从 从库选主 哨兵也可以集群 高可用 容量上的限制
cluster:多主多从 按key进行槽位分配 不同key分散不同主节点上
持久化
save命令,redis阻塞 直到rdb完成
bgsave,fork子进程 主进程在fork过程中短暂阻塞,子进程创建完主进程响应客户端请求
save m n:m秒内n隔键改变 自动触发持久化 bgsave进行 设置多个满足其一就触发
flushall:清空redis所有数据,flushdb清空当前redis所在库数据(0号库 rdb文件)
主动同步:全量同步自动触发bgsave命令
一个dump.rdb文件,方便持久化 容灾性好 方便备份 性能最大化 fork子进程完成写操作
数据安全性低,rdb间隔一段时间进行持久化,redis故障,数据丢失
aof:亲这边建议优先使用
日志形式记录服务器处理的每一个写 删除操作
aof缓存区据策略向硬盘同步操作,定期对aof文件重写 压缩的目的
每秒同步:异步完成 效率高,一秒数据会被丢失宕机时
每修改同步:同步持久化,每次发生数据变化 立即记录到磁盘 最多丢一条
不同步:操作系统控制 丢失更多数据
数据安全,redis-check-aof工具解决数据一致性问题
aof文件大 恢复慢 ;数据集大 rdb启动效率低,运行效率无rdb高
相关文章:

redis瘦身版
线程模型 纯内存操作/非阻塞io多路复用/单线程避免多线程频繁上下文切换 基于Reactor模式开发了网络事件处理器:文件事件处理器,单线程的 io多路监听多个socket,据socket事件类型选择对应的处理器,高性能网络通信模型,…...

使用ChatGPT高效完成简历制作[中篇]-有爱AI实战教程(五)
演示站点: https://ai.uaai.cn 对话模块 官方论坛: www.jingyuai.com 京娱AI 导读:在使用 ChatGPT 时,当你给的指令越精确,它的回答会越到位,举例来说,假如你要请它帮忙写文案,如果没…...

论文阅读——SpectralGPT
SpectralGPT: Spectral Foundation Model SpectralGPT的通用RS基础模型,该模型专门用于使用新型3D生成预训练Transformer(GPT)处理光谱RS图像。 重建损失由两个部分组成:令牌到令牌和频谱到频谱 下游任务:...
Redis的过期键是如何处理的?过期键的删除策略有哪些?请解释Redis的内存淘汰策略是什么?有哪些可选的淘汰策略?
Redis的过期键是如何处理的?过期键的删除策略有哪些? Redis的过期键处理是一个重要的内存管理机制,它确保在键过期后能够释放相应的内存空间。Redis对过期键的处理主要依赖于其删除策略,这些策略包括被动删除(惰性删除…...

软件测试方法 -- 等价类边界值
测试用例的定义 测试用例是为了特定的目的而设计的一组测试输入、执行条件和预期的结果,以便测试是否满足某个特定需求。通过大量的测试用例来检验软件的运行效果,他是指导测试工作进行的依据。 下面我们介绍几种常用的黑盒测试方法 等价类划分法 定…...

LeetCode——贪心算法(Java)
贪心算法 简介[简单] 455. 分发饼干[中等] 376. 摆动序列[中等] 53. 最大子数组和[中等] 122. 买卖股票的最佳时机 II[中等] 55. 跳跃游戏 简介 记录一下自己刷题的历程以及代码。写题过程中参考了 代码随想录的刷题路线。会附上一些个人的思路,如果有错误…...

【MySQL】2. 数据库基础
1. 数据库基础(重点) 1.1 什么是数据库 存储数据用文件就可以了,为什么还要弄个数据库? 文件保存数据有以下几个缺点: 文件的安全性问题 文件不利于数据查询和管理 文件不利于存储海量数据 文件在程序中控制不方便 数据库存储介…...

《如何使用C语言去下三子棋?》
目录 一、环境配置 二、功能模块 1.打印菜单 2.初始化并打印棋盘 3、行棋 3.1玩家行棋 3.2电脑行棋 4、判断是否和棋 5.判赢 三、代码实现 1、test.c文件 2、game.c文件 3、game.h文件 一、环境配置 本游戏用到三个文件,分别是两个源文件test.c game.c 和…...

Linux——线程(4)
在上一篇博客中,我讲述了在多执行流并发访问共享资源的情况下,如何 使用互斥的方式来保证线程的安全性,并且介绍了Linux中的互斥使用的是 互斥锁来实现互斥功能,以及它的原理,在文章的结尾我提出了一个问题 用来引出同…...
vite+vue3项目中svg图标组件封装
一、安装插件 npm i vite-plugin-svg-icons -D 二、插件配置 // vite.config.jsimport { createSvgIconsPlugin } from "vite-plugin-svg-icons"; import path from "path";export default defineConfig({plugins: [// svg图标配置项createSvgIconsPlug…...

根据服务器系统选择对应的MySQL版本
1. 根据服务器系统选择对应的MySQL版本 MySQL有多个版本,选择对应的版本,重点信息是Linux的GLIBC版本号,Linux的版本、系统位数。 1.1 查看Linux的GLIBC版本号 通常libc.so会支持多个版本,即向前兼容,查看该文件中…...

【数据结构】栈与队列的“双向奔赴”
目录 前言 1.使用“栈”检查符号是否成对出现 2.使用“栈”实现字符串反转 3.使用“队列”实现“栈” 4.使用“栈”实现“队列” 前言 什么是栈? 栈(stack)是一种特殊的线性数据集合,只允许在栈顶按照后进先出LIFOÿ…...

sqllab第二十七关通关笔记
知识点: union select 关键字过滤 通过<> /**/进行截断处理 un<>ion sel<>ect 没效果uni/**/on sel/**/ect 被过滤了双写绕过 这关对select进行了多重过滤,无法进行双写绕过 大小写绕过 UNion SElect (这关可以用&am…...

助推直播产业升级与经济转型 天府锋巢直播产业基地成都开园
2023年年末,位于成都天府新区兴隆湖板块的天府锋巢直播产业基地正式开园,为成都直播产业注入了新的活力,助推成都经济转型和产业升级。天府锋巢直播产业基地的成立,不仅是成都直播产业的一大盛事,更是对成都经济发展的…...

VSCode+python单步调试库代码
VSCodepython单步调试库代码 随着VSCode版本迭代更新,在最新的1.87.x中,使用Python Debugger扩展进行调试时,扩展的justMyCode默认属性为true,不会进入库中的代码。这对debug而言不太方便,因此需要手动设置一下&#…...

如何使用EMC测试软件执行辐射抗扰度测试?(三)软件检查及手动模式
一、前言 之前的文章为大家介绍了使用EMC测试软件执行辐射抗扰度测试的测试方法、频率变化模式测试方法、校准方法及调制。本期文章继续为大家介绍软件检查和手动模式两部分内容。 前文回顾: 如何使用EMC测试软件执行辐射抗扰度测试?(一&am…...

云手机为电商提供五大出海优势
出海电商行业中,各大电商平台的账号安全是每一个电商运营者的重中之重,账号安全是第一生产力,也是店铺运营的基础。因此多平台多账号的防关联管理工具成了所有电商大卖家的必备工具。云手机最核心的优势就是账户安全体系,本文将对…...

chatgpt大模型基础学习
chatgpt大模型基础学习 1. 吴恩达提示工程2. 大模型说的token是什么 1. 吴恩达提示工程 知乎 https://zhuanlan.zhihu.com/p/626290417?utm_id0 中文版 https://mp.weixin.qq.com/s?__bizMzkwMjQ5MzExMg&mid2247483714&idx1&sn5e905f5ec6196f6dc2187db2a8618f02&…...

代码随想录算法训练营第14天 part01 | 二叉树理论基础篇
代码随想录 二叉树理论基础篇 二叉树的种类 二叉树有两种主要的形式:满二叉树和完全二叉树 满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。 这棵二叉树为满二叉树…...

async与defer的区别
原文解释 async vs defer attributes - Growing with the Web...

关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...

企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

Linux中《基础IO》详细介绍
目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改,实现简单cat命令 输出信息到显示器,你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...

Unity VR/MR开发-VR开发与传统3D开发的差异
视频讲解链接:【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...
前端调试HTTP状态码
1xx(信息类状态码) 这类状态码表示临时响应,需要客户端继续处理请求。 100 Continue 服务器已收到请求的初始部分,客户端应继续发送剩余部分。 2xx(成功类状态码) 表示请求已成功被服务器接收、理解并处…...
从零手写Java版本的LSM Tree (一):LSM Tree 概述
🔥 推荐一个高质量的Java LSM Tree开源项目! https://github.com/brianxiadong/java-lsm-tree java-lsm-tree 是一个从零实现的Log-Structured Merge Tree,专为高并发写入场景设计。 核心亮点: ⚡ 极致性能:写入速度超…...

高抗扰度汽车光耦合器的特性
晶台光电推出的125℃光耦合器系列产品(包括KL357NU、KL3H7U和KL817U),专为高温环境下的汽车应用设计,具备以下核心优势和技术特点: 一、技术特性分析 高温稳定性 采用先进的LED技术和优化的IC设计,确保在…...
GB/T 43887-2024 核级柔性石墨板材检测
核级柔性石墨板材是指以可膨胀石墨为原料、未经改性和增强、用于核工业的核级柔性石墨板材。 GB/T 43887-2024核级柔性石墨板材检测检测指标: 测试项目 测试标准 外观 GB/T 43887 尺寸偏差 GB/T 43887 化学成分 GB/T 43887 密度偏差 GB/T 43887 拉伸强度…...