Redis高性能策略以及各种缓存异常问题和解决方案

目录

Day 2.25

异步子线程机制

CPU架构类型,以及可能产生的影响

Day 2.26

redis 缓存与后端 MySQL 数据不一致问题

redis 缓存异常问题 (缓存雪崩,缓存击穿,缓存穿透)及 解决措施

布隆过滤器实现原理


Day 2.25

学习了导致redis高性能的原因,除去高效数据结构和内存数据库以外的原因。

  • 异步子线程机制

  • CPU架构对redis性能的影响

异步子线程机制

针对阻塞点可能需要异步处理,避免阻塞主线程。

eg:BigKey (键值对) 删除操作、清空数据库操作、AOF日志同步写操作(AOF异步刷盘)、从库加载RDB文件、集合的全量查询和聚合操作 O(N)。

思考一个问题:AOF日志同步写操作我知道会阻塞,那读写缓存中的同步直写策略是否也会阻塞?会

两者阻塞之后的处理是否一致?不一致。 同步直写在redis主线程中完成,AOF刷盘是异步完成的。

哪些操作可以采取异步子线程处理的形式?

多数写操作、无需带回返回值的非关键路径操作

eg:BigKey 删除操作、数据库清空操作、AOF日志同步写操作、大文件关闭.

CPU架构类型,以及可能产生的影响

单CPU单核: 不存在由于程序在不同核上运行导致的 context switch 以及 缓存失效 问题

单CPU多核:存在 context switch 和 缓存失效问题,解决办法,bind_cpu_core.

多CPU多核:NUMA 架构(非统一内存访问架构)存在远程内存访问问题,不在一个CPU Socket(处理器)上面,解决办法,绑到一起,避免远程内存访问。

将Redis实例绑定核心的弊端:多程序资源竞争,措施,绑定物理核或者直接修改源码,将不同程序绑定到不同逻辑核上。

Day 2.26

  • redis 缓存与后端 MySQL 数据不一致问题

  • redis 缓存异常问题 (缓存雪崩,缓存击穿,缓存穿透)及 解决措施

redis 缓存与后端 MySQL 数据不一致问题

一致性描述:

  • 缓存中有数据,且缓存中数据与后端MySQL数据一致.

  • 缓存中无数据,且后端MySQL数据是最新值.

出现情况:

针对读写缓存,必须同步直写操作,才能保障数据一致.

采用异步写回策略,必然会出现这个数据不一致问题。写回前都是不一致的.

解决策略:用同步只写不就OK了.

针对只读缓存

eg1:在修改或者删除操作的时候,需要同时操作缓存和数据库,既要跟新数据库删除数据库中的数据、还要删除对应缓存。 两者操作如果只完成其一,自然会出现读取旧值的问题。

解决策略:用消息队列缓存重试 【重试机制】

eg2:两者操作均完成,但是无法保障原子性问题。大量的线程并发读取操作的时候,其他线程切入进来,读取到旧值并可能利用旧值做缓存跟新操作导致数据不一致。

解决策略:延迟双删。

redis 缓存异常问题 (缓存雪崩,缓存击穿,缓存穿透)及 解决措施

What? How?

雪崩:大量的请求无法在redis中进行处理,导致压力给到后端MySQL,可能导致MySQL崩溃.

击穿:在redis中的超级热点数据过期,redis中没有,大量请求压到MySQL上.

穿透:请求数据不在redis中,同时也不在MySQL上. redis彻底沦为 “摆设”.

雪崩分类解决措施

  1. redis大量数据同时过期

    • 解决1:给过期时间设置随机值,避免同时.

    • 解决2:服务降级,只提供核心数据的访问服务,有点像限流,但是是按照数据的重要程度做的限制.

  2. redis实例发生宕机

    • 解决1:访问熔断 (暂停服务),对业务影响大,待redis实例恢复.

    • 解决2:访问限流,限制访问量,待redis实例恢复.

    • 解决3:高可用策略,设置redis实例集群,主从复制,容灾容错,自动切换.

击穿解决策略

  • 不给特别热点的数据设置过期时间.

穿透解决策略

  1. 针对不存在的数据设置空置缓存,缺省值缓存。直接返回空值.

  2. 使用布隆过滤器判断数据是否存在.

  3. 前端进行请求合法性检测,避免恶意攻击.

布隆过滤器实现原理

描述:创建阶段,就是一个hash函数族,算出这个不同的hash值,然后 hash_value % hash_table_len 映射到不同的hash槽位上,并且将这个bite位设置为1。若后续数据再次来临。依次检验hash_value对应槽位是否全为1. 若非,则数据不存在,若全1则可能存在。

作用:过滤去除一定不存在的数据。

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

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

相关文章

【C语言】linux内核netdev_start_xmit函数

一、中文注释 static inline netdev_tx_t netdev_start_xmit(struct sk_buff *skb, struct net_device *dev, struct netdev_queue *txq, bool more) {// 获取网络设备操作集合const struct net_device_ops *ops dev->netdev_ops;int rc;// 调用实际发送数据包的函数&…

ElasticSearch之找到乔丹的空中大灌篮电影

写在前面 本文看一个搜索的实际例子,找到篮球之神乔丹的电影Space Jam,即空中大灌篮。 正式开始之前先来看下要查询的目标文档,以及查询的text: 要查询的目标文档 {..."title": "Space Jam",..."ove…

什么是智能合约

前言:在介绍智能合约的前提下,需要先介绍一下区块链 一.什么是区块链 区块链实质上是一个去中心化、分布式的可进行交易的数据库或账本,具有下列典型特征: 去中心化:简单来说,在网络上一个或多个服务器瘫…

Java设计模式:单例模式之六种实现方式详解(二)

在Java中,单例模式是一种常见的设计模式,用于确保一个类只有一个实例,并提供一个全局访问点来获取该实例。单例模式在多种场景下都很有用,比如配置文件的读取、数据库连接池、线程池等。本文将详细介绍Java中实现单例模式的六种方…

组合模式(Composite Pattern)

定义 组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构,并且能像使用单独对象一样使用组合对象。组合模式让客户端代码对单个对象和复合对象的使用具有一致性。 在组合模式中,我们定义…

Spring Boo项目中方法参数对象中字段上存在的自定义注解如何进行拦截解析

一、前言 在Spring Boot项目开发过程中,我们经常会使用到自定义注解的方式进行业务逻辑开发,此时注解我们一般是放在方法或者类上面,通过AOP切面拦截的方式进行自定义业务逻辑填充。但是如果自定义注解放在类的字段上,此时应该如…

Clickhouse填坑记4:Too many parts问题分析

Clickhouse在进行大数据量同步时,感觉很爽,插入速度非常快,但是,在使用过程中却出现了几次“Too many parts”异常报错,搞得很痛苦,这里记录一下解决过程。 我这边采用的是Flink程序,实时将数据写入ClickHouse,在执行一段时间后,会提示“Too many parts”异常,如下异…

云端技术驾驭DAY13——Pod污点、容忍策略、Pod优先级与抢占、容器安全

往期回顾: 云端技术驾驭DAY01——云计算底层技术奥秘、云服务器磁盘技术、虚拟化管理、公有云概述 云端技术驾驭DAY02——华为云管理、云主机管理、跳板机配置、制作私有镜像模板 云端技术驾驭DAY03——云主机网站部署、web集群部署、Elasticsearch安装 云端技术驾驭…

XXE 漏洞简单研究

近期在做个基础的 web 常见漏洞的 ppt,主要参考 OWASP TOP 10 2017RC2,此版本中增加了 XXE 攻击,所以自己简单的研究下 XXE 攻击。XXE(XML External Entity)XML 外部实体,当前端和后端通信数据采用 xml&…

element el-date-picker 日期组件置灰指定日期范围、禁止日期范围日期选择

JS如何将当前日期或指定日期转时间戳_javascript技巧_脚本之家 小于指定日期前的日期置灰 比如这里 指定日期是 2024-02-20 10:48:15 disabledDate(time) time是一个函数提供的时间用于比较 他是一个时间戳↓ 理解为我们想要置灰的时间 time.getTime() < timeStamps- 1 *…

《Large Language Models for Generative Information Extraction: A Survey》阅读笔录

论文地址&#xff1a;Large Language Models for Generative Information Extraction: A Survey 前言 映像中&#xff0c;比较早地使用“大模型“”进行信息抽取的一篇论文是2022年发表的《Unified Structure Generation for Universal Information Extraction》&#xff0c;也…

IDEA开发环境热部署

开发环境热部署 在实际的项目开发调试过程中会频繁地修改后台类文件&#xff0c;导致需要重新编译重新启动&#xff0c;整个过程非常麻烦&#xff0c;影响开发效率。Spring Boot提供了spring-boot-devtools组件&#xff0c;使得无须手动重启SpringBoot应用即可重新编译、启动项…

cesium相机视角跳转和缩放至entity方法汇总

下面汇总的相机视角跳转方法有很多种&#xff0c;都是根据某一个经纬度高程坐标[x,y,z]&#xff0c;Entity实体或者矩形四至范围[west , south , east , north]作为视图跳转到目标范围的中心&#xff0c;然后在该位置上设置相机相对的偏移量&#xff0c;这个偏移量主要是设置相…

36.云原生之SpringCloud+k8s实践

云原生专栏大纲 文章目录 SpringCloudk8s介绍spring-cloud-kubernetes服务发现配置管理负载均衡选主 spring-cloud-bookinfo案例构建项目环境配置namespace部署与验证productpagegatewaybookinfo-admindetailsratingsreviewsreviews-v1reviews-v2 总结 SpringCloudk8s介绍 ht…

vue-router4 (六) 路由嵌套

应用场景&#xff1a; ①比如京东页面的首页、购物车、我的按钮&#xff0c;可以点击切换到对应的页面&#xff1b; ② 比如 Ant Design左侧这些按钮点击就会切到对应的页面&#xff0c;此时可以把左侧按钮放在父路由中&#xff0c;右侧的子路由 1.路由配置&#xff0c;子路由…

将法律条文很美观的复制到word上

前言 目前很多法律条款都没有现成的PDF或者word格式的供大家下载&#xff0c;这个时候呢&#xff0c;领导又要求你帮他搞定&#xff0c;这就很。。。。 步骤 复制全部条款到word中使用wps的排版功能&#xff0c;将空格和空段落全部移除 3. 设置好你需要的格式 标题&#xff…

常用对象的遍历方法

var obj [{name: 1111,account: {01: { name: 1.1 },02: { name: 1.2 },03: { name: 1.3 },04: { name: 1.4 },05: { name: 1.5 },}} ]var nowObj obj[0].account;1、for…in 任意顺序遍历对象所有的可枚举属性&#xff08;包括对象自身的和继承的可枚举属性&#xff0c;不含…

影像仪激光扫描功能,无缝连接2D/3D混合测量

在现代工业生产领域&#xff0c;影像仪用于质量控制和产品检测&#xff0c;是一个不可或缺的工具。它通过高精度的成像和图像处理技术&#xff0c;可以及时发现产品的缺陷和异常&#xff0c;以保证产品质量的稳定性和一致性。 影像仪的重要性及其面临的挑战 在工业生产方面&a…

视频生成模型(猜测sora)demo

import numpy as np import paddle import paddle.nn as nn import paddle.nn.functional as Fclass FeedForward(nn.Layer):def __init__(self, hidden_dim)

代码随想录算法训练营第42天|● 1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零

文章目录 1049.最后一块石头的重量II思路&#xff1a;动归五部曲代码&#xff1a; ● 494. 目标和思路五部曲1.确定dp数组五部曲2.确定dp公式3.dp初始化4.遍历顺序 代码&#xff1a; ● 474.一和零思路动归五部曲 代码&#xff1a; 1049.最后一块石头的重量II 思路&#xff1a;…