redis瘦身版

news2024/11/18 14:41:32

线程模型

纯内存操作/非阻塞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高

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

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

相关文章

PMP能两周快速通过吗?

两周时间有点赶,一般备考要2个月左右,有时间尽量多准备准备。 分享一篇左羊学霸的备考总结,希望能帮你 前言 作为⼀名通过PMP项⽬管理认证并且拿到3A成绩 ( PMP认证最好成绩) 的 学习者, 来跟⼤家分享下我考取PMP证书的动机与过程…

Matplotlib数据可视化实战-1数据可视化Matplotlib基础

1.1绘图的一般过程: 1.导入相关库 2.生成、读入或计算得到数据; 3.根据需要绘制折线图、散点图、柱状图、饼状图、雷达图、箱线图、三维曲线/曲面以及极坐标系图形; 4.根据需要设置图形属性; 5.显示或保存绘图结果。 例如&…

【STL源码剖析】【2、空间配置器——allocator】

文章目录 1、什么是空间配置器?1.1设计一个简单的空间配置器,JJ::allocator 2、具备次配置力( sub-allocation)的 SGI 空间配置器2.1 什么是次配置力2.2 SGI标准的空间配置器,std::allocator2.2 SGI特殊的空间配置器,std::alloc2.…

FISCO BCOS:深入浅出FISCO BCOS区块链底层平台

苏泽 大家好 这里是苏泽 一个钟爱区块链技术的后端开发者 本篇专栏 ←持续记录本人自学两年走过无数弯路的智能合约学习笔记和经验总结 如果喜欢拜托三连支持~ 我前面有补充相关的区块链的知识 如果没有了解的话 可能部分概念或名词会不懂哦 建议先了解一波再来看~http://t.c…

sentinel黑白名单权限控制

黑白名单权限控制 规则配置 规则创建 创建一个 AuthorityRule 规则对象三个关键要素 setStrategy: 黑白名单类型setResource: 规则和资源的绑定关系setLimitApp: 限制的来源 调用 AuthorityRuleManager.loadRules()加载规则 监听器实例化和管理 AuthorityPropertyListener…

2024年普通人的创业机会在哪里?2024热门创业项目!2024普通人想翻身的风口行业!

创业千万别冲动,社区团购代理创业失败案例! 是不是一开始挺看好这个赛道,看别人做的风生水起,以为不难,真正开始做才发现不好做,没有先天优势,货源和客源从零开始积累,开始就是摸着石…

Qt学习--QT Creator使用基本介绍

话不多说,直接开搞,笔者用的是5.12.9版本 双击打开QT Creator 显示这个界面 新建工程 然后出现这样的界面 点击运行 就弹出了一个这个,空的,因为我们啥也没写

JUC并发编程(四)

1、同步模式保护性暂停 用一个线程等待另一个线程的执行结果 有一个结果需要从一个线程传递到另一个线程,让他们关联同一个中间类。如果有结果不断从一个线程到另一个线程那么可以使用消息队列(见生产者/消费者)。JDK 中,join 的…

人物百度百科如何创建?人物类词条编辑指南

创建人物百度百科是一项既具有挑战性的工作。下面,伯乐网络传媒就来给大家详细介绍如何创建人物百度百科,包括准备工作、创建步骤以及常见问题解答。 一、创建人物百度百科的准备工作 1. 人物百科词条创建要求 百度百科对创建人物词条有一定的要求&…

学嵌入式真的很烧钱吗?

如果是走嵌入式单片机方向,这篇内容,很适合预算1000以下的,作为发育参考。 下面是我2011年的入行成本: 买了智能小车,还有51开发板,杂七杂八,可能一共不到1000。 一开始迷之自信了,买…

HTML静态网页成品作业(HTML+CSS)——24节气之冬至介绍(1个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有1个页面。 二、作品演示 三、代…

误删.idea后的svn菜单找回

最近做开发maven出了问题总是找不到已有的包,最后相信大力出奇迹删除.idea目录重启idea,结果问题没解决,给我svn搞没了。无奈重新研究恢复svn,这里记录一下我成功的方法。 我是之前做过配置,删除.idea后消失的svn相关…

2024湖南消费促进年启动仪式在益阳举行

优化消费环境,激发消费活力。值3月15日消费者权益日,由湖南省商务厅、益阳市人民政府主办,益阳市商务局承办的2024湖南消费促进年(春季)启动仪式暨益阳消费促进系列活动在益阳佳宁娜广场隆重举行。湖南省各市州商务部门领导、各区县市商务主管部门领导、参展协会代表以及100多家…

《算法设计与分析第二版》100行 C语言实现 广度度优先算法 BFS——最短距离

抄录自课本P157页。 #include <stdio.h> #define MAXQ 100 // 队列大小 #define MAxN 10 // 最大迷宫大小 int n8; // 迷宫大小 char Maze [MAxN][MAxN] {{O,X,X,X,X,X,X,X,},{O,O,O,X,O,X,O,X,},{X,X,O,O,O,X,O,X,},{X,X,O,X,O,X,X,X,},…

普通人搞副业,空闲时间做,月入5w+

我是电商珠珠 大家会发现&#xff0c;朱砂越来越火&#xff0c;不仅是因为它好看&#xff0c;而且商家对外扬言可以招财。现在的人对爱情不屑一顾&#xff0c;财神殿里可以长跪不起&#xff0c;人人都想求财&#xff0c;想要在空余时间搞副业赚大钱&#xff0c;但做什么还没有…

掌握 Swagger annotations(注解):完全指南与最佳实践

利用 Swagger 注解增强 API 理解 Swagger 提供的注解集是其框架中定义 API 规范和文档的重要工具。这些注解在代码里标注重要部分&#xff0c;为 Swagger 的解析工作铺路&#xff0c;进而生成详尽的 API 文档。开发者编写的注释能够被转换成直观的文档&#xff0c;并展现API端…

【呼市经开区建设服务项目水、电能耗监测 数采案例】

一、项目背景及需求 项目地点位于内蒙古呼和浩特市&#xff0c;呼市数字经开区建设服务项目。属于企业用能数据采集、能耗监测板块子项目。 针对水、电能耗数据采集&#xff0c;结合现场客观因素制约&#xff0c;数据采集方面存在较大难度。大多数国网电表485接口由于封签限制&…

B009-springcloud alibaba 服务配置 Nacos Config

目录 服务配置中心介绍Nacos Config入门Nacos Config深入配置动态刷新方式一: 硬编码方式方式二: 注解方式(推荐) 配置共享同一个微服务的不同环境之间共享配置不同微服务中间共享配置 nacos的几个概念 服务配置中心介绍 首先我们来看一下,微服务架构下关于配置文件的一些问题…

031—pandas 读取解析实验室数据至DataFrame

前言 某个科研实验室在进行一项物理实现&#xff0c;实验仪器会输出一个 txt 文本的数据&#xff0c;研究人员需要从这个文本中将数据结构化才能进行进行统计分析。 在为个解析和分析过程中&#xff0c;他们选择了 Python 的 pandas 库来完成这些操作。我们今天来完成这这个 t…

一口气看完明朝276年历史

明朝是中国历史上最后一个由汉人建立的大一统封建王朝&#xff0c;建立于公元1368年&#xff0c;亡于公元1644年&#xff0c;国祚276年&#xff0c;传12世16帝。 太祖建国 太祖&#xff08;1368~1398&#xff09; 公元1368年&#xff0c;朱元璋在南京应天府建元称帝&#xff…