当前位置: 首页 > news >正文

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事件类型选择对应的处理器,高性能网络通信模型&#xff0c…...

使用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. 跳跃游戏 简介 记录一下自己刷题的历程以及代码。写题过程中参考了 代码随想录的刷题路线。会附上一些个人的思路,如果有错误&#xf…...

【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&#xff…...

sqllab第二十七关通关笔记

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

助推直播产业升级与经济转型 天府锋巢直播产业基地成都开园

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

VSCode+python单步调试库代码

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

如何使用EMC测试软件执行辐射抗扰度测试?(三)软件检查及手动模式

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

云手机为电商提供五大出海优势

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

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 | 二叉树理论基础篇

代码随想录 二叉树理论基础篇 二叉树的种类 二叉树有两种主要的形式&#xff1a;满二叉树和完全二叉树 满二叉树&#xff1a;如果一棵二叉树只有度为0的结点和度为2的结点&#xff0c;并且度为0的结点在同一层上&#xff0c;则这棵二叉树为满二叉树。 这棵二叉树为满二叉树…...

async与defer的区别

原文解释 async vs defer attributes - Growing with the Web...

奇数乘积(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int i 1;int j 3;//循环运算&#xff1b;while (j < 12){//运算&#xff1b;i i * j;//改变数值&#xff1b;j 2…...

中文分词库:jieba的词性对照表

jieba词性对照表 字母词性a形容词ad副形词ag形容词性语素an名形词b区别词c连词d副词dg副词素e叹词f方位词g语素h前接成分i成语j简称略称k后接成分l习用语m数词mq数量词n名词ng名词性语素nr人名ns地名nt机构团体名nz其他专名o拟声词p介词q量词r代词rg代词性语素rr人称代词rz指示…...

Linux:git的基础操作

git的下载 版本控制系统一般分为两种&#xff0c;集中式版本控制系统&#xff0c;分布式版本控制系统 什么是集中式版本控制系统&#xff1a;版本库集中存放在中央服务器&#xff0c;工作时候使用自己的电脑&#xff0c;当工作时候在中央服务器上拉取最新版本的代码&#xff0c…...

【华为OD机试】CPU 算力分配【C卷|100分】

【华为OD机试】-真题 !!点这里!! 【华为OD机试】真题考点分类 !!点这里 !! 题目描述 现有两组服务器A和B,每组有多个算力不同的CPU,其中 A[i] 是 A 组第 i 个CPU的运算能力, B[i] 是 B组 第 i 个CPU的运算能力。 一组服务器的总算力是各CPU的算力之和。 为了让两组服务器…...

挑战杯 机器视觉目标检测 - opencv 深度学习

文章目录 0 前言2 目标检测概念3 目标分类、定位、检测示例4 传统目标检测5 两类目标检测算法5.1 相关研究5.1.1 选择性搜索5.1.2 OverFeat 5.2 基于区域提名的方法5.2.1 R-CNN5.2.2 SPP-net5.2.3 Fast R-CNN 5.3 端到端的方法YOLOSSD 6 人体检测结果7 最后 0 前言 &#x1f5…...

基于Spring Boot的社区便民服务管理系统的设计与实现

摘 要 二十一世纪我们的社会进入了信息时代&#xff0c;信息管理系统的建立&#xff0c;大大提高了人们信息化水平。传统的管理方式对时间、地点的限制太多&#xff0c;而在线管理系统刚好能满足这些需求&#xff0c;在线管理系统突破了传统管理方式的局限性。于是本文针对这一…...

亚信安慧AntDB:数字化创新背后的数据力量

亚信安慧AntDB的“融合实时”的特性&#xff0c;不仅使得数据库具备了更强大的适应性&#xff0c;更让企业在不同业务场景下能够更好地实现业务目标&#xff0c;释放出更大的商业价值。融合实时的特性让AntDB具有了高度灵活性和实时性&#xff0c;使其能够满足企业在不同业务需…...

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

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

信也科技发布消费者权益保护2023年度报告: 科技驱动、服务为先、合作共建社会化消保体系

3月15日消费者权益日当天&#xff0c;信也科技发布《消费者权益保护2023年度报告》&#xff08;下称《报告》&#xff0c;消费者权益保护简称“消保”&#xff09;。该报告为信也科技消保委员会成立后首份公开披露的消保工作年度总结。《报告》显示&#xff0c;信也科技通过智能…...

REDHAWK——连接(续)

文章目录 前言一、突发 IO1、数据传输①、输入②、输出 2、突发信号相关信息 (SRI)3、多输出端口4、使用复数数据①、在 C 中转换复数数据 5、时间戳6、端口统计①、C 二、消息传递1、消息生产者①、创建一个消息生产者②、发送消息 2、消息消费者①、创建消息消费者②、注册接…...

怎么做解析视频网站/重庆seo小潘大神

java中一个对象的完整生命周期涉及java平台的很多技术。在创建一个java对象之前&#xff0c;需要先由虚拟机加载该类&#xff0c;然后对该java类进行链接和初始化。初始化完成之后&#xff0c;才创建出该类的对象实例。java对象也有自己的初始化过程&#xff0c;主要通过构造方…...

洛阳做网站排名/北京专业seo公司

给出n个点&#xff0c;求出用这n个点可构成的正方形的个数。可以枚举两个点&#xff0c;求出正方形的另两个点。 然后判断这两个是否存在。我的hash公式写得比较烂&#xff0c;跑了1s多。 下面是求正方形剩下两点的公式&#xff1a; 已知&#xff1a; (x1,y1) (x2,y2) 则&…...

www.wordpress./深圳谷歌seo公司

今天学习总内容 yum - 定时任务: - 一次性执行:at batch - 周期性执行:crontab- 管理系统的临时文件yum命令的总结: yum install xxx 【软件名】 -yyum命令yum install softwarename ##安装 repolist …...

b2c交易模式的网站有哪些/南京百度快照优化排名

测试环境&#xff1a; docker xampp 9.1.1 ubuntu 16.0.4 hadoop 2.7 jdk 1.8 一、配置mysql集群 通过docker拉取mysql集群镜像创建容器&#xff0c;包括ndb_mgm&#xff08;管理节点&#xff09;、ndb_mgmd01、ndbd01&#xff08;数据节点1&#xff09;、ndbd02&#xff08;数…...

如何建一个自己网站/今天新闻最新消息

1.拦截器实现登录验证判断 1.1 实现思路 1、有一个登陆页面&#xff0c;需要写一个controller访问页面。2、登陆页面有一提交表单的动作。需要在controller中处理。判断用户名密码是否正确。如果正确&#xff0c;向session中写入用户信息。返回登陆成功。3、拦截用户请求&…...

做企业网站用什么字体/百度搜题在线使用

看到这样的标题&#xff0c;你是不是也很惊奇呢&#xff1f;仔细的去回想一下&#xff0c;好像很多APP界面设计当中的头像都是圆形的。很少见到头像是方形的、菱形或者四边形的。这是为什么呢&#xff1f; 难道是因为好看吗&#xff1f;今天25学堂的小编跟大家一起聊聊APP设计干…...