redis缓存与集群

备份

rdb数据快照,内存数据记录到磁盘,故障重启磁盘读取文件 恢复数据

save主进程进行save阻塞其他命令   

bgsave fork子进程rdb不影响其他的

   fork主进程得到子进程 共享主进程内存数据 fork读取内存数据写入rdb文件

   当主进程执行写操作时 拷贝一份数据 执行写操作 copy-on-write

  文件有压缩,体积小 恢复快 占用资源大 cpu和内存 丢失数据的风险

aof 记录每一次命令,默认关闭 redis.conf   appendonly yes 

频率 appendsync always/everysec/no

bgrewriteaof 整理命令 文件体积大 数据完整性高;恢复速度慢 重写会占用大量cpu和内存资源 

主从

第一次全量同比

  版本信息 ------> bgsave ------> 完整数据生成rdb文件 

     后续命令记录缓存区repl_baklog 逐步发送给slave命令 

   replication Id数据集标记 id一致说明同一数据集 master唯一然后slave继承

   offset偏移量 repl_baklog 中数据增大 slave完成同步记录当前offset     

slave重启后 增量同步 

优化

  repl-diskless-sync yes无磁盘复制 通过网络直接同步 避免全量同步;磁盘慢网络快

 单节点内存占用不要太大,减少rdb过多磁盘io

 提高repl_baklog大小 ,尽快故障恢复 避免全量同步

 限制master上slave节点数量,太多slave 可采用主从从链式结构 建构master压力

哨兵sentinel

监控:检查master slave是否正常工作  发送ping命令

自动故障恢复:重新选主

选主:

   判断slave与master断开时间长短,超过指定时间down-after-milliseconds*10会排除slave节点

   判断slave节点的slave-priority值,越小优先级越高,0不参与选举,一样则offset值越大数据越新优先级越高

  slave节点运行id大小,越小优先级越高

故障转移:

 sentinel 通知备选master执行slaveof no one ,其他的

模式:readFrom

   master主节点读取, master_preferred优先从master读取然后才读取replica

  replica从slave读取,replica_preferred 优先从slave读取 所有slave不可用才读取master

 分片集群*莱熙

搭建分片集群

   多个master各保存自己的数据 海量数据存储 高并发写 

   master通过ping检测彼此健康状态,客户端访问任意节点

散裂插槽:每一个master映射到0-16383 数据key与插槽绑定 据key有效部分CRC16计算插槽值

   key含{} 且至少1个字符,{}的部分是有效部分

   key中不含{} 整个key都是有效部分

   CRC16得到hash值,然后对16384取余 = slot值

集群伸缩 

添加节点 redis-cli --cluster   add-node ip:port  集群中存在的ip:port

redis-cli --cluster reshard 集群中存在的ip:port //重新分片

故障转移 redis-cli当前节点执行cluster failover

3 是数据同步;

failover模式:

缺省 默认流程如上图   

force省略对offset一致性校验 

takeover直接执行第五步忽略一致性/master状态/其他master意见

redisTemplate:lettuce

多级缓存

浏览器客户端缓存   nginx本地缓存   redis  tomcat进程缓存  mysql 

caffeine java8 

lua:c  openResty处理nginx逻辑

nil 无效值 false boolean number数值 string字符串 function函数  table关联数组

openResty 处理nginx逻辑,调用redis等

  查询tomcat

封装http查询函数

tomcat 集群 负载均衡 进程缓存间不共享

  upstream 

nginx负载均衡:轮询 hash 权重  

canal数据同步

mysql等slave节点,监听binlog

健值设计

 key 业务名:数据名:id    长度<44字节   不含特殊字符

避免bigkey:key大小 成员数量综合判定

   单个key的value<10kb    集合类型key 元素数量<100

   少量qps导致带宽使用率被占满 ;运算耗时久  cpu压力序列化

 redis-cli --bigkeys 遍历所有key返回整体统计信息和top1的bigkey

 scan扫描key strlen hlen等判断key长度 不推荐memory usage占用cpu

 三方工具redis-rdb-tools分析rdb快照文件

 监控redis网络数据,报警

   拆分存储 / 删除(异步删 4.0后unlink命令异步删除 3前拆分删) 

恰当的数据类型

对象:

 json对象 简单粗暴 但数据耦合 

 字符串打散  依次存储 占空间大 统一处理困难

 hash ziplist压缩 中间占用少 灵活访问 ,代码相对复杂

    entry>500 哈希表不是ziplist 内存占用多

    hash-mx-ziplist-entries配置entry上限,但是entry多导致bigkey 最好<1000zf

字符串会有原数据等信息 占用无谓的空间 推荐使用hash set  sortedset等

批处理优化

pipeLine 不具备原子性 

redis存储key先计算slot,同一批key所在slot等节点不一样报错,使用spring封装等template

服务端优化

关闭rdb持久化功能 使用aof持久化  在slave定期手动rdb作为备份

合理的rewrite阈值 避免频繁bgrewrite

配置no-appendfsync-on-rewrite=yes 禁止在rewrite期间被aof 避免阻塞

redis实例物理机预留足够内存,给fork rewrite预留

单个redis实例内存上限不要太大 4/8g 加快fork速度 减少主从同步 数据迁移压力

不要与cpu密集型应用部署在一起 

不要高硬盘负载应用部署 数据库 消息队列

慢查询

超过slowlog-log-slower-than阈值的命令 建议1000,入队列排队执行 微妙

  日志长度slowlog-max-len慢查询日志 队列的长度 128 建议1000

安全:

设置密码 / 禁用keys flushall  flushdb config set(rename-command重命名)

bing限制网卡 禁止外网访问

开防火墙    不使用root账户启动redis     不使用默认端口

内存配置

内存不足 key频繁被删 响应时间变长 qps不稳定 

数据内存:redis主要部分(bigkey 碎片 重启)

进程内存:代码 常量池 

缓存区内存:客户端 aof    复制  波动比较大

   复制缓冲区:主从复制repl_backlog_buf 如果太小可能导致频繁全量复制,影响性能 repl_backlog_size来设置,默认1mb

  aof缓冲区:aof刷盘前缓存区域,aof执行rewrite缓存区 无法设置上限

  客户端缓冲区:输入 输出 最大1g 不能设置 输出缓冲区可以设置

info memory 

集群配置

 默认配置,一个插槽不可用 整个集群停止对外服务 数据一致性

建议 cluster-require-full-coverage no

集群节点不断的ping确定其他节点状态,ping携带信息插槽信息/集群状态信息

集群中节点越多 状态信息数据量越大 :

   避免大集群 节点数量不要太多 <1000 多个集群

   避免单个物理机运行太多redis实例

   配置合适的cluster-node-timeout值

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vs2022 qt 关于lnk2001和2019同时报错的问题

需要像qt中添加模块&#xff0c;这里&#xff0c;缺少qtopenglwidgets模块

MATLAB的基础二维绘图

1.plot函数 &#xff08;1&#xff09;plot函数的基本用法 plot(x,y)其中&#xff0c;x和y分别用于存储x坐标和y坐标数据&#xff0c;通常x和y为长度相同的向量。 例如&#xff1a; x[2.3,3.3,4.3,1];y[1.3,2,1.8,3]plot(x,y) (2)plot(x,y,选项&#xff09;其中选项包括颜色…

超详细的Scrapy框架的基本使用教程

Scrapy的介绍 scrapy的工作流程&#xff08;重点&#xff01;&#xff01;&#xff01;&#xff09; 如下图所示&#xff1a; 爬虫&#xff1a; 负责向引擎提供要爬取网页的URL&#xff0c;引擎会把这个URL封装成request对象并传递给调度器&#xff0c;把引擎传递过来的resp…

【送书活动1】基于React低代码平台开发:构建高效、灵活的应用新范式

【送书活动1】基于React低代码平台开发&#xff1a;构建高效、灵活的应用新范式 写在最前面一、React与低代码平台的结合优势二、基于React的低代码平台开发挑战三、基于React的低代码平台开发实践四、未来展望《低代码平台开发实践&#xff1a;基于React》编辑推荐内容简介作者…

逻辑代数基础(一)(逻辑符号)

目录 三种基本运算 与运算 或运算 非运算 复合运算 与非运算 或非运算 与或非运算 异或运算 同或运算 逻辑代数的基本定律和常用公式 逻辑代数的基本定律 常量-常量的运算 常量-变量的运算 特殊定律 逻辑代数的常用公式 逻辑函数 逻辑函数的定义 逻辑函数的约束条件 逻…

140.乐理基础-音程的转位

上一个内容&#xff1a;139.乐理基础-一四五八度为何用纯?-CSDN博客 上一个内容里练习的答案&#xff1a; 本次内容并不会感觉到有多大用处&#xff0c;但要牢牢掌握。 音程的转位&#xff1a; 改变音的高低顺序 比如c-e&#xff0c;c低、e高 音程转位&#xff1a;也就是变成…

为什么有了HTTP协议,还要有WebSocket协议?

文章目录 使HTTP不断轮询长轮询WebSocket是什么&#xff1f;怎么建立WebSocket连接WebSocket抓包WebSocket的消息格式WebSocket的使用场景总结 平时我们打开网页&#xff0c;比如购物网站某宝。都是点一下列表商品&#xff0c;跳转一下网页就到了商品详情。 从HTTP协议的角度来…

【C语言】编程题专项练习+答案

目录 1.删除有序数组中重复的数 2.用除二取余的方法&#xff0c;把任意一个十进制正数的二进制序列输出&#xff08;不考虑溢出&#xff09; 2.1如果是把任意一个十进制整数的二进制序列输出呢&#xff1f; 3.输出一个六行六列的整形矩阵&#xff0c;并输出其转置矩阵。矩阵…

C++之map

1、map介绍 map是C STL的一个关联容器&#xff0c;它提供一对一的数据处理能力。其中&#xff0c;各个键值对的键和值可以是任意数据类型&#xff0c;包括 C 基本数据类型&#xff08;int、double 等&#xff09;、使用结构体或类自定义的类型。 第一个可以称为关键字(key)&…

盘点国内大厂的10个AI创作工具,看看你都用过哪些?

国内大厂的 AI 创作工具&#xff0c;目前已经非常多了&#xff0c;而且有很多都是大家耳熟能详的。 下面整理了一些&#xff0c;包含 AI 绘画、AI 视频、AI 智能体、AI 大模型等多个方向的国内大厂 AI 创作工具。 发现有几款 AI 工具&#xff0c;还真的非常好用。看看这些 AI…

H5小游戏,斗地主

H5小游戏源码、JS开发网页小游戏开源源码大合集。无需运行环境,解压后浏览器直接打开。有需要的,私信本人,发演示地址,可以后再订阅,发源码,含60+小游戏源码。如五子棋、象棋、植物大战僵尸、开心消消乐、扑鱼达人、飞机大战等等 <!DOCTYPE html> <html> <…

算法46:动态规划专练(力扣198: 打家劫舍 力扣740:删除并获取点数)

打家劫舍问题&#xff1a; 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定…

每日五道java面试题之mysql数据库篇(五)

目录&#xff1a; 第一题. 联合索引是什么&#xff1f;为什么需要注意联合索引中的顺序&#xff1f;第二题. 什么是数据库事务&#xff1f;第三题. 事物的四大特性(ACID)介绍一下?第四题. 按照锁的粒度分数据库锁有哪些&#xff1f;锁机制与InnoDB锁算法?第五题. 从锁的类别上…

Linux 防火墙 操作命令【实用】

防火墙操作&#xff1a; 描述命令查看防火墙状态systemctl status firewalld、firewall-cmd --state暂时关闭防火墙systemctl stop firewalld永久关闭防火墙systemctl disable firewalld开启防火墙systemctl start firewalld开放指定端口firewall-cmd --zonepublic --add-port…

Docker常见命令使用

Docker命令是使用Docker的基础。这里记录下Docker日常运维过程中经常使用到的一些命令&#xff0c;更全面的命令还请参考Docker官网。 docker用法概述 Docker命令可以通过CLI工具实现与服务器的交互。Docker命令的语法如下&#xff1a; docker [DOCKER-COMMAND] [OPTIONS] […

基于openKylin与RISC-V的MindSpore AI项目实践

项目目标&#xff1a; 在openKylin系统上安装和配置MindSpore框架。开发一个简单的图像分类模型&#xff0c;并在RISC-V平台上进行训练和推理。根据RISC-V的特性&#xff0c;对MindSpore框架进行必要的优化。 目录 项目目标&#xff1a; 训练模型 编写训练代码&#xff0c;设…

Mysql之存储过程与函数

Mysql之存储过程与函数 存储过程概述分类创建存储过程一般的语法格式完整的语法格式案例一案例二 调用存储过程调用语法格式 创建存储函数存储过程与函数的查看&#xff0c;修改和删除 存储过程概述 官网解释是&#xff1a;存储过程的英文是 Stored Procedure 。它的思想很简单…

微信小程序开发:循环定时删除阿里云oss上传的文件

上文有说到我们开发了定时删除阿里云oss的功能&#xff0c;但是一次只能删除10条。 本文我们做到一次删除全部过期的文件。 实现&#xff1a;使用while循环&#xff0c;在循环里获取是否还有已过期的&#xff0c;没有就break掉&#xff0c;有就走删除逻辑。 开始代码部分&am…

鸿蒙系统适配的流程

鸿蒙系统适配的流程通常涉及以下关键步骤&#xff0c;以下是鸿蒙系统适配的一般流程&#xff0c;具体流程可能会根据项目的具体需求和开发团队的情况进行调整和优化。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1. 准备工作&#…

常见限流算法及其实现

一、背景 在分布式系统中&#xff0c;随着业务量的增长&#xff0c;如何保护核心资源、防止系统过载、保证系统的稳定性成为了一个重要的问题。限流算法作为一种有效的流量控制手段&#xff0c;被广泛应用于各类系统中。本文将详细介绍四种常见的限流算法、两种常用的限流器工…