Redis之常用实战场景

1.Redis数据丢失场景

1.1 持久化丢失

采用RDB或者不持久化,就会有数据丢失,因为是手动或者配置以快照的形式来进行备份。

解决: 启用AOF,以命令追加的形式进行备份,但是默认也会有1s丢失,这是在性能与数据安全性中寻求的一个最适合的方案,如果为了保证数据一致性,可以将配置更改为always,但是性能很慢,一般不用。

# appendfsync always

1.2主从切换

因为Redis的数据是主异步同步给从的,提升了性能,但是由于是异步同步到从。所以存在数据丢失的可能。

1.master 写入数据 k1 , 由于 是异步同步到 slave ,当 master 没有同步给slave的时候, master 挂了
2.slave 会成为新的 master ,并且没有同步 k1
3.master 重启,会成为新 master slave ,同步数据会清空自己的数据,从新的master 加载
4.k1 丢失

1.3 sentinel脑裂

a.假如有个sentinel集群跟redis集群,如图

b. 当我的master机器(129)跟另外2台发生分区容错,网络断开

c. sentinel2跟sentinel3大于三分之二,满足故障转移条件(sentinel故障转移需要过半),这个时候会从2个slave中选出一个master

d. 客户端假如连接到sentinel1,我们数据会写入129,连接到sentinel2或sentinel3,数据就会写入128,同时有2个master写入数据。假如129写入了k1

e.当网络恢复后,129会变成128的从,129的数据全部从128同步

f. k1丢失

尽量减少主从切换跟sentinel数据丢失的解决办法:

 min-replicas-to-write 1 至少有1个从节点同步到我主节点的数据(有的话让数据写入),但是由于是异步同步,所以是最终一致性 不会确保有数据写入

min - replicas - max - lag 10 判断上面 1 个的延迟时间必须小于等于 10s

2. Redis缓存跟DB一致性问题

在并发环境下,可能导致redis跟DB的数据产生不一致。

2.1 怎么产生?

查询缓存逻辑

a.在我们查询DB之前,先去查询Redis,如果Redis存在,直接返回;如果Redis不存在,从DB查询。

b.从DB查询后,回写到Redis

缓存依赖

当修改DB的数据,DB数据修改成功后,删除Redis数据,做好缓存依赖。

丢失场景

1. 线程 A 请求缓存,没有缓存,从 DB 拿到 1
2. 线程 B 1 更新为 2 ,并且删除缓存, DB 的值为 2
3. 线程 A 更新缓存, redis 1

因此,最终我们发现,redis的数据为1,db数据为2,出现了数据一致性问题。

所以,数据一致性产生的根本问题,是查询DB跟操作Redis不是原子性的,所以并发会导致数据一致性问题。

 2.2 怎么解决?

2.2.1 不可取的强一致性方案

延时双删

所谓延时双删,就是在更新 DB 后,等待一段时间,再进行 Redis 删除!来等待其他的线程拿到的都是最新数据!
也会产生很多问题。
1. 延时多久?不知道其他线程要多久。
2. 不够优雅,代码中写入延时代码。

采用锁机制,不让有并发

 在更新的时候,采取锁的机制,不让其他线程进行删除操作!

但是会拖慢整个性能,违背了 Redis 的初衷

 综上,我们只能采用最终一致性,不应该去保证强一致性。

2.2.2 最终一致性方案

每个缓存设置过期时间

设置过期时间,就算不一致,也只是在有效时间内的不一致。

Mysql canal等数据同步工具

捕捉到DB的更改,同步到相关Redis,相对比较复杂,要知道每个数据对应的缓存。

3. edis缓存雪崩、穿透、击穿问题分析

3.1缓存雪崩

缓存雪崩就是redis大量的数据同时过期(失效) 并且并发很高,则会导致所有的key全部打到DB

1. 保证 Redis 的高可用,防止由于 Redis 不可用导致全部打到 DB
2. 加互斥锁或者使用队列,针对同一个 key只允许一个线程到数据库查询( 一般不这么干  与redis初衷违背 )
3. 缓存定时预先更新,避免同时失效
4. 通过加随机数,使 key 在不同的时间过期

3.2 缓存穿透

缓存穿透就是恶意攻击,指的是查询的key redis没有 db也没有,就会导致每次请求都会走DB

怎么解决? 最好的办法就是找运维  封IP 

能不能把数据放到另外一个地方, 在访问redis和db之间就过滤一次。举个例子

 比如,你去按摩,你有指定的技师,那么你先看下这个技师会不会值班,如果值班,你就去,否则你就不去。并且这个值班表必须提前安排好!可以用一个在线表格,在就打钩,不能说你把这个人站在这里,看到这个人就说明在。

上面例子到我们的redis中,就是腾出一部分内存空间,为value值打标记,这就是我们布隆过滤器的思想。

3.2.1 布隆过滤器

 

位图里面只有0和1 zsc jack tom代表的是 value值 布隆过滤器的key, 向上指向的1 为两次hash后得到的位置 标记为1.但是我们没有办法判断tom是不是真的存在,因为Tom所在的两个位置与zsc和jack的hash冲突,因为无法判断tom是不是存在,但是布隆过滤器一定能够判断数据不存在。

思考: 那么怎么减少hash冲突呢? 多次hash; 增大位图大小。

还有一个弊端: 必须首先初始化数据到布隆过滤器,并且不能删除(就拿tom来说,如果tom删除了,第3和第5的位置就会置为0,影响其他的元素会导致 zsc和jack即使db中有,也判断为了没有)

实现方式:

1Redission 封装基于 Redis bitMap 实现分布
2.google.guava 本地内存.
3.Redis bloom模板  https://redis.io/docs/stack/bloom/

3.3 缓存击穿

缓存击穿是说单个key过期的时候有大量的并发访问。 解决办法: 使用互斥锁,回写redis,并且采用双重检查锁来提升性能,减少对DB的访问

以上,我们Mysql现在有集群等方案,所以也没那么脆弱,如果真的到了瓶颈我们也可以进行DB横向扩容

4. 慢查询分析

许多存储系统都会有慢日志查询,提供给开发跟运维来找到哪些指令是比较耗时的。比如Mysql,那么Redis中也会有慢日志查询。

但是Redis的慢查时间只会去统计执行指令的时间,不会统计网络消耗时间,所以没有慢查不代表没有超时。

多慢才是慢查询?可配

#The following time is expressed in microseconds , so   1000000  is equivalent   微秒表示
#to one second . Note that a negative number disables the slow log , while   负数禁用慢日志记录
#a value of zero forces the logging of every command 为0记录每个命令
slowlog - log - slower - than 10000    // 默认 10ms  建议1ms

最多存储多少慢查?可配

slowlog - max - len 128   // 最多存储 128 条数据

 如果发现慢查,怎么避免?

1. 尽量不要使用 hgetall keys 等指令
2. 调整大对象,变成多个子对象(一般超过 10K 就算比较大的 key ,但是根据业务来)

4.1 阻塞分析

1.业务记录好相关日志,以及降级报警等系统,知道有阻塞

2. 原因主要分为几个点
        2.1 外部原因:网络阻塞 CPU 竞争等
        2.2 内部原因:数据结构不合理导致大key 等单条指令耗时过大、 fork 子进程阻塞、AOF 刷盘阻塞

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

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

相关文章

K-means聚类模型算法

K-means聚类是一种无监督的机器学习算法,用于将数据点划分到K个不同的簇中。这种算法的目标是最小化簇内的方差,即使得每个簇内的数据点与簇中心的距离尽可能小。以下是K-means聚类模型的主要步骤和特点: 主要步骤: 1. 选择K值&…

深入解析Spring Cloud Config:构建高可用分布式配置中心

在微服务架构中,配置管理是一个关键问题。Spring Cloud Config提供了一种解决方案,它是一个高可用、分布式的外部配置中心。本文将深入探讨Spring Cloud Config的原理、架构及其在实际项目中的应用,帮助读者掌握如何构建一个高效、可靠的分布…

SD NAND(贴片式TF卡)在储能领域的应用

储能系统(Energy Storage System,简称ESS)是指能将电能以化学能、势能、动能等形式储存起来,并在需要时将其转化为电能供应给用户的设备。主要由电池管理系统(BMS)、能量管理系统(EMS&#xff0…

拿到Offer了才知道,这家公司年终奖只有几百块~

我也挠头了 最近又有不少粉丝上岸了,其中一位分享的事情比较有意思,和你分享一下: 以后你对比Offer的时候也可以多个经验。 事情是这样的: 他在经过2个多月空窗期之后终于拿到了Offer,月薪涨幅不大,但是…

java的clone

一、clone的用法: package chatRoom.F5;class Person implements Cloneable{//1.public String name;public Person(String name) {this.name name;}//2.protected Person clone() throws CloneNotSupportedException {return (Person)super.clone();//重写Object…

linux脚本执行报错|syntax error near unexpected token `$‘do\r‘‘

一、问题 在Window上用记事本txt写了个linux脚本,放到Linux上去执行报错|syntax error near unexpected token $‘do\r‘‘ 二、可通过vim的-b命令查询脚本(-b表示二进制模式) vim -b youtest.sh 发现,sh脚本后面多了^M 三、…

媒体有入口,发稿有入口 是什么意思?

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 媒体有入口,发稿有入口是指在新闻媒体发稿时,稿件可以通过一定的路径被访问和浏览。具体来说,有入口的新闻稿件可以通过点击链接,逐步深入…

芯片验证分享1 —— 开篇及名词解释

大家好,我是谷公子的藏经阁,今天和大家很高兴能和大家分享的是芯片验证中的一些内容,希望对大家的日常工作有所帮助,如果这些内容有帮助到大家的话,那么此次的分享就很值得。另外,对于这个课题,…

揭开旅游卡项目!是当下趋势风潮?来这给你整明白!

旅游卡作为一种旅游产品,近年来在市场上逐渐流行起来。它通常包含一系列旅游服务,如门票、住宿、餐饮、交通等,旨在为消费者提供一站式的旅游体验。在您所描述的案例中,云南6天五晚游旅游卡以极低的价格吸引消费者,并通…

ChatTTS增强版,增强音质、批量处理、固定音色、支持长文本

大家好,最近ChatTTS文字生成语音项目挺火。只需要输入一段文字,就可以生成一段非常逼真的声音。声音的效果非常不错。它支持英文和中文两种语言。我在原版的基础上做了一些改动,整合包分享给大家。 功能介绍 除了基础的文本生成音频功能以外…

实验10 RIP协议配置

实验10 RIP协议配置 一、原理描述二、RIPv1配置(一)实验目的(二)实验内容(三)实验配置(四)实验步骤 三、 RIPv2配置(一)实验目的(二)实…

IT闲谈——什么是容器?

目录 什么是容器一、容器的起源与发展二、目前使用较多的容器三、容器能用来做什么四、容器的应用场景 什么是容器 随着云计算和微服务的兴起,容器技术逐渐成为IT行业的热门话题。容器,简而言之,是一种轻量级的、可移植的、独立的软件包&…

windows 使用脚本 批量将一个文件夹下面 子文件夹下的视频文件拷贝到另一个文件下

如果想要在Windows上使用脚本(比如批处理脚本 .bat)来复制指定文件夹下所有子文件夹中的视频文件到另一个目标文件夹,可以使用以下的批处理脚本示例: echo off setlocal enabledelayedexpansion :: 设置源文件夹和目标文件夹的…

职称继续教育--专业课6

单选题(共20题,每题1.5分) 1、新型城镇化改革试点的总体要求是:以人的城镇化为核心,以()为关键,大胆探索,试点先行。 A、提升质量 2、根据本讲,建设和管理城…

cesium 之 flyTo、setView、lookat

orientation配置项的参数 cesium中,朝向orientation,通常使用heading、pitch、roll这三个参数来描述 heading 通过调整heading的值,使相机朝向特定的方向朝向方向说明【北:0, 东:π/2弧度, …

Keras深度学习框架实战(6):使用CNN-RNN架构实现视频分类

1、绪论 1.1 CNN-RNN概述 1.1.1 结构组成 CNN-RNN架构结合了卷积神经网络(CNN)和循环神经网络(RNN)两种不同类型的神经网络结构。 卷积神经网络(CNN): 主要用于处理具有网格状拓扑结构的数据…

VLM学习笔记

目录 基础VLM模型CLIP CLIP (Contrastive Language-Image Pre-training) clip的再训练 CLIP-Chinese 轻量化VLM探索:MobileVLM V2 怎么预训练VLMs? TurboMind LLM推理引擎 基础VLM模型CLIP CLIP (Contrastive Language-Image Pre-training) 基本…

【Python】轻松打包:CentOS7上使用PyInstaller将Shell脚本转换为可执行文件的完美指南

【Python】轻松打包:CentOS7上使用PyInstaller将Shell脚本转换为可执行文件的完美指南 大家好 我是寸铁👊 总结了一篇【Python】轻松打包:CentOS7上使用PyInstaller将Shell脚本转换为可执行文件的完美指南✨ 喜欢的小伙伴可以点点关注 &#…

【CXL协议-控制和状态寄存器(8)】

8.0 控制和状态寄存器 Compute Express Link 设备控制和状态寄存器被映射到单独的空间:配置空间和内存映射空间。配置空间寄存器使用配置读取和配置写入进行访问。内存映射寄存器使用内存读取和内存写入进行访问。表 123 总结了本章中定义的寄存器位的属性。除非另…

人员身份级的数据中心机房作业随工

电信运营商的数据中心机房作为承载各类业务系统的物理基础,其运维安全直接关系到业务的连续性和数据的安全性。传统的机房管理方式依赖人工审核和监督,存在效率低下、安全隐患多等问题。因此,通过综合运用物联网、大数据分析和人工智能技术&a…