redis--06高并发问题

Redis缓存的并发问题 redis并发加伪集群的搭建 阅读详情

高并发问题

缓存穿透

当用户访问的数据既不在缓存也不在数据库中时,就会导致每个用户查询都会“穿透”缓存,到达数据库。这种情况被称为缓存穿透。当高度并发的访问请求到达时,缓存穿透不仅增加了响应时间,而且还会引发DBMS的高并发查询,这种高并发查询很可能会导致DBMS崩溃。

缓存穿透产生的原因及解决思路

  • 在数据库中没有相应的查询结果
    • 对非法请求进行限制
  • 查询结果为空时,不对查询结果进行缓存
    • 对结果为空的查询给出默认值

缓存击穿

对于某一个缓存,在高并发情况下若其访问量特别巨大,当该缓存的有效时限到达时,可能会出现大量的访问都要重建该缓存,即这些访问请求发现缓存中没有该数据,则立即到DBMS中进行查询,那么就可能会引发对DBMS的高并发查询,从而间接导致DBMS的崩溃

通常采用双重检测锁来预防

// 获取key对应的value
turnover = ops.get();
if(turnover == null){
  // 对当前资源加锁
  synchronized(this){
    // 获取key对应的value
    turnover = ops.get();
    if(turnover == null){
      // 从数据库中查询出数据
      // 将数据存入到redis缓存中
    }
  }
}

该算法在高并发场景下,从第一个获取该资源的请求再到将该数据从数据库中查询出来存入到redis缓存,在这段时间内也可能会有获取同一资源的请求,此时由于该资源在redis中并不存在,故这些请求也会通过第一层if判断,但由于第一个请求对该资源的加锁,使得这些请求会被阻塞在该处.当第一个请求成功将数据库中的数据查询并存入到redis缓存中后,该锁被解开.第二个请求同样也会对该资源进行加锁,然后获取该资源,发现并不为空后会直接解锁,防止了对该数据的重复查询写入操作.在这段时间内的请求都会重复这一操作.而当第一个请求将数据查询并写入到redis中之后的请求都会直接被第一层if返回

缓存雪崩

对于缓存中的数据,很多都是有过期时间的.若大量缓存的过期时间在同一很短的时间段内几乎同时到达,那么在高并发访问场景下就可能会引发对DBMS的高并发查询,而着将可能直接导致DBMS的崩溃

对于缓存雪崩没有很直接的解决方案,最好的解决方案就是预防,规划好缓存过期的时间.如果是分布式部署,则要将热点数据均匀分布在不同节点中,将访问负载均衡开

数据库缓存双写不一致

  • 修改数据库更新缓存

    • 对于具有缓存warmup功能的系统,DBMS中常用数据的变更,都会引起缓存中相关数据的更新。在高并发写请求场景下,若多个请求要对DBMS中同一个数据进行修改,修改后还需要更新缓存中相关数据,那么就有可能会出现缓存与数据库中数据不一致的情况
  • 修改数据库删除缓存

    • 对于没有缓存warmup功能的系统,为了保持缓存与数据库数据的一致性,一般都是在对数据库执行了写操作后,就会删除相应缓存。
    • 在高并发读写请求场景下,若这些请求对DBMS中同一个数据的操作既包含写也包含读,且修改后还要删除缓存中相关数据,那么就有可能会出现缓存与数据库中数据不一致的情况
  • 延迟双删

    • 解决修改数据库删除缓存时出现的问题
    • 延迟双删方案:在写操作完成后会立即执行移除缓存的删除操作,然后再停上一段时间后再进行一次删除。两次删除的间隔时长要大于一次缓存写操作的时长。
    • 这里的第二次删除,其目的是作用于删除该写请求执行时间段内,其它并行写请求所导致的结果
  • 队列

    • 出现双写不一致的问题,主要原因是,对请求的处理出现了并行。只要将请求写入到一个统一的队列中,处理完一个请求后才能处理下一个请求,即使得系统对用户写请求的处理串行化即可解决。
  • 分布式锁

    • 使用队列会使得系统性能降低。
    • 对数据库中这个共享数据的访问使用分布式锁来进行协调
【中间件篇-Redis缓存数据库06】Redis主从复制/哨兵 高并发高可用 在分布式系统中为了解决单点问题,通常会把数据复制多个副本部署到其他机器,满足故障恢复和负载均衡等需求。Redis也是如此,它为我们提供了复制功能,实现了相同数据的多个Redis 副本。复制功能是高可用Redis的基础,后面章节的哨兵和集群都是在复制的基础上实现高可用的。默认情况下,Redis都是主节点。每个从节点只能有一个主节点,而主节点可以同时具有多个从节点。复制的数据流是单向的,只能由主节点复制到从节点。 阅读详情

相关推荐

10xGenomics Loupe Browser实战指南:从数据导入到细胞注释全流程解析

本文提供了10xGenomics Loupe Browser的实战指南,详细解析了从数据导入到细胞注释的全流程。作为一款强大的可视化工具,Loupe Browser能帮助研究者直观探索单细胞测序数据,通过交互式操作进行细胞选择、差异基因分析和细胞类型注释,是单细胞数据分析入门和结果验证的高效平台。

blue42的博客 453

Redis:解决分布式高并发修改同一个Key的问题

本篇文章是通过watch(监控)+mutil(事务)实现应用于在分布式高并发处理等相关场景。下边先通过redis-cli.exe来测试多个线程修改时,遇到问题及解决问题。 高并发下修改同一个key遇到的问题: 1)定义一个hash类型的key,key为:lock_test,元素locker的值初始化为0。 2)实现高并发下对locker元素的值递增:定义64个多线程,并发的对lock_tes...

weixin_33834628的博客 2545

随机森林模型及案例(Python)

1 集成模型简介 集成学习模型使用一系列弱学习器(也称为基础模型或基模型)进行学习,并将各个弱学习器的结果进行整合,从而获得比单个学习器更好的学习效果。 集成学习模型的常见算法有Bagging算法和Boosting算法两种。 Bagging算法的典型机器学习模型为随机森林模型,而Boosting算法的典型机器学习模型则为AdaBoost、GBDT、XGBoost和LightGBM模型。 1.1 Bagging算法简介 Bagging算法的原理类似投票,每个弱学习器都有一票,最终根据所有弱学习器的投

qq_42433311的博客 4万+

springboot+redis+lua脚本进行接口限流,解决高并发计数不准确问题

springboot接口限流 redis + lettuce+lua脚本+自定义注解实现,配置redis集群高可用,

liu649983697的专栏 1979

三极管共集电极放大电路详解:射极跟随器的原理、计算与应用

三极管放大电路是模拟电子技术的基石,常见组态包括共发射极、共基极和共集电极。其中共集电极电路因输入电阻大、输出电阻小、电压增益接近1的特性,常被用作射极跟随器,在信号缓冲、级间隔离和低阻抗负载驱动等场景中发挥关键作用。其核心价值并非电压放大,而是完成阻抗变换,将高内阻信号源转换为低内阻输出,同时保持信号幅值基本不变。理解其静态工作点计算与动态参数推导(如电压增益、输入输出电阻)是设计实用电路的前提。本文结合12V电源下的具体设计实例和仿真验证,梳理了从电路识别、参数计算到工程实践的完整流程,并指出常见设计误

weixin_29193259的博客 367

最全卷积总结篇(分组、深度可分离、空洞、转置等)

分组卷积(Group Convolution)是一种卷积操作方式,它最早在AlexNet中引入,并在深度学习中被广泛使用,尤其是在高效模型设计(如MobileNet和ResNeXt)中。分组卷积通过将输入特征通道分为若干组,并在每组内单独进行卷积操作,可以减少计算复杂度和参数量,同时有效利用模型的结构特性。分组卷积的工作原理通道分组:输入特征图的通道图为C_in,输出特征图的通道数为C_out,将每组的C_in和C_out分为G组,每组的通道数为C_in/G和C_out/G。组内卷积。

qq_44815135的博客 4218

06-Redis 实现分布式锁和解决锁续期问题

目录 一 为什么需要分布式锁 二 Redis 实现分布式锁 2.1 加锁操作 2.2 释放锁操作 三 参考文档 一 为什么需要分布式锁 在一些高并发的场景中,需要对共享变量进行互斥访问。也就是说在同一时间点有且只能有一个客户端能对共享资源进行访问。如电商系统中的秒杀系统等。 二 Redis 实现分布式锁 为了保证分布式锁的可用性,我们要保证分布式锁的实...

javaTalk 4885

Maven

是一款自动化构建工具,专注于Java项目的构建、依赖的管理。

weixin_58738870的博客 2163

七、Redis的高并发 & 高可用(集群)

由于Redis集群的性能消耗不低,难以维护,使用限制太多。所以一般情况下在生产环境单台Redis或者主从 + 哨兵可以应对数据缓存,就不会搭建Redis集群。原理都讲清楚了,接下来我们搭建一个Redis集群玩一玩吧。

ALLWE的博客 1933

LabVIEW机器视觉通用软件

LabVIEW 通用视觉一款仿C模式的思想与方法 全网最精简零基础+通用视觉全套视频教程 只想把LabVIEW当作一种兴趣,结果却当成了职业 http://t.elecfans.com/c1181.html 本次(开源 )针对有一定视觉基础或项目开发经验的工程师量身打造视觉通用性系统(完全仿面向对象的原理),相对于一般的非标框架更具功能性,有效的解决复杂项目开发过程中的思路瓶颈。 LabVIEW通用视觉系统:通用软件可快速解决大部分简单的视觉开发项目,帮助众多软件工程师解决在非标视觉软件开发中的繁琐过程问

qq_21516871的博客 4609

Amazon SES 移出沙盒完整指南 & 高通过率模板

AWS SES沙盒模式转正式模式申请指南 申请正式模式需通过AWS审核,常见被拒原因包括邮件用途不清晰、缺少退订机制或发送量不合理。人工申诉需登录AWS Support Center提交服务限额提升请求,填写详细的公司信息、邮件用途及合规措施。 高通过率申诉模板需包含: 公司信息:名称、网址及与AWS的合作情况。 邮件规范:明确类型(交易/营销)、退订链接及退信处理机制。 发送计划:合理预估发送量,确保合规。 关键点:真实信息、用途清晰、退订机制完善、发送量合理。首次被拒可修改后重新提交。

xianyinsuifeng的博客 328

redis缓存高并发批量写入mysql测试

redis缓存高并发批量写入mysql测试测试环境需要安装的模块测试的场景结论 测试环境 nodejs v12.13.1 redis 3.20.1000 windows版(不要鄙视我) mysql 8.0 需要安装的模块 在npm上安装redis,cron定时任务模块,mysql模块. 测试的场景 主要针对物联网系统,带的设备数量比较多,写入操作居多,读取操作并不是很多. 与设备通讯时会产生大量的...

qq_34415621的博客 2551

【Python基础】FastAPI 从入门到项目实战操作详解

【Python基础】FastAPI从入门到使用实战操作详解

congge_study的博客 437

2023-06-13:统计高并发网站每个网页每天的 UV 数据,结合Redis你会如何实现?

HyperLogLog 算法是基于概率论中的伯努利试验,并结合了极大似然估算方法,并做了分桶优化。实际上,在大数据场景中,目前还没有发现更好的高效算法来准确计算基数。因此,在不需要追求绝对准确性的情况下,使用概率算法是解决这一问题的一个不错方案。概率算法不直接存储数据集合本身,通过一定的概率统计方法来估算基数,这种方法可以大大节省内存,同时保证误差控制在一定范围内。目前用于基数计数的概率算法包括:举个例子来理解HyperLogLog算法,有一天A和B玩打赌的游戏。

福大大架构师每日一题 2万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

《Redis高并发计数器实现方案:INCR命令与Lua脚本优化》

通过利用Redis的内存数据结构和原子性操作,开发者可以在分布式环境中实现准确的计数器功能,同时避免了传统方法的局限性。与此同时,Redis的高性能和低延迟特性使其能够处理大量的并发请求,满足了大规模分布式系统对计数器的需求。Redis的原子操作确保了每次计数器递增操作都是不可分割的,避免了因并发操作导致的计数误差。即使在节点故障或网络分区的情况下,Redis的高可用性特性也能保证计数器的正确性。此外,Redis的主从复制机制可以进一步提升计数器的容灾能力,确保计数数据的安全性和可用性。

wfs 450

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

后端笔记06 | 高并发下的接口幂等性解决方案总结

结合一些技术博客,学习接口幂等性概念、场景、类型、并发问题下的实现方案

2201_75974870的博客 1900

Redis-06多路复用机制详解

Redis采用多路复用I/O机制实现高性能网络处理,通过抽象层支持多种系统API(如epoll、kqueue等)。其核心架构包括事件循环、文件事件和时间事件管理,使用统一接口屏蔽平台差异。Redis根据操作系统自动选择最优多路复用技术(Linux优先epoll),通过事件驱动模型实现单线程高并发处理,避免创建过多线程的开销。关键数据结构包括aeEventLoop及事件处理器,实现了高效的事件注册、监听和分发机制。

d3y1`5 81_09 913

06-Redis架构设计应用实践

包含最全MySQL、Redis、Java并发编程等等面试题和答案,用于参考~

2301_82101470的博客 933

04-06-A-Redis缓存高频问题实战

秒杀防超卖、库存回滚、缓存一致性、订单超时取消、重复下单、穿透/击穿/雪崩、限流防刷、分布式锁、Redis 挂了怎么办、库存不一致怎么修复

hhkrye的博客 1267

.net高并发的解决方案

测试方法: 本地模拟测试网站高访问高并发采用的测试工具是大名鼎鼎的Loadrunner,这个工具做测试的一般都知道。在代震军的博客中,有以下几篇介绍了通过Loadrunner进行压力并发测试。 当DiscuzNT遇上了Loadrunner(上) http://www.cnblogs.com/daizhj/archive/2009/09/25/1573926.html 当Discuz

lisky119的专栏 1万+

Redis--Day06(上)--高可用,高并发集群配置

高可用,高并发集群配置高可用高并发集群配置1. 中心化和去中心化1.1 中心化1.2 去中心化2. Redis集群的执行流程分析2.1 哈希槽说明2.2 执行流程分析3. Redis集群的搭建3.1 文档3.2 原理:去中心化3.3 集群规则3.4 搭建过程3.4.1 新建文件夹3.4.2 准备一个服务端程序3.6.3 准备6个redis的配置文件3.4.3 同时启动所有的redis3.4.4 使用脚本创建集群(分配槽)3.4.5 使用docker下载redis-trib的镜像运行[推荐]3.4.6 测试集

励志当大牛的博客 280

Redis 介绍

Redis 数据库是一个非关系型数据库,在正式学习 Redis 之前,先来了解关系型数据库与非关系型数据库的概念。Redis(RemoteDictionaryServer,远程字典型)是一个开源的、使用 C语言编写的NoSQL数据库。Redis 基于内存运行并支持持久化,采用 key-value(键值对)的存储形式是目前分布式架构中不可或缺的一环。Redis服务器程序是单进程模型,也就是在一台服务器上可以同时启动多个Redis 进程而 Redis 的实际处理速度则是完全依靠于主进程的执行效率。

m0_68625092的博客 3161

redis深度剖析: 06 常见问题和企业级架构

一. 常见问题1、fork耗时导致高并发请求延时RDB和AOF的时候,其实会有生成RDB快照,AOF rewrite,耗费磁盘IO的过程,主进程fork子进程fork的时候,子进程是需要拷贝父进程的空间内存页表的,也是会耗费一定的时间的一般来说,如果父进程内存有1个G的数据,那么fork可能会耗费在20ms左右,如果是10G~30G,那么就会耗费20 * 10,甚至20 * ...

201

06 Redis-cluster

  redis官方声称可以达到10万/秒,每秒执行10万条命令,假如业务需要每秒100万的执行命令呢?一台服务器内存正常是16~256G,假如你的业务需要500G内存,新浪微博作为世界上最大的redis存储,就超过1TB的数据,去哪买这么大的内存条?各大公司有自己的解决方案,推出各自的集群功能,核心思想都是将数据分片(sharding)存储在多个redis实例中,每一片就是一个redis实例。 ...

weixin_30363509的博客 91

NodeJs06 高并发

高并发架构 在业务的最初期,由于业务和用户的体量比较小,可能采用单机就足够了。随着业务的增长,用户量和并发请求量都会不断上升。当增长到一定的瓶颈的时候,系统能否抗住压力,就需要采取一些方案了。这就是著名的C10K,甚至C100K,C1000K的问题。 一般我们会从2个层面去解决这些问题:硬件层面和软件架构层面。 硬件层面 硬件层面,我们可以进行纵向扩展和横向扩展。 纵向扩展就是增加硬件的...

weixin_30265171的博客 267

Flink 学习日志 03:自定义一个SourceFunction,完成对Redis中数据的读取

本文介绍了在Flink中自定义SourceFunction读取Redis数据的完整流程:通过Jedis客户端连接WSL2中的Redis服务,编写RedisSource实现循环读取所有Key-value并逐条输出,结合Thread.sleep()实现每秒一条的流式效果。关键步骤包括环境准备、添加Jedis依赖、配置IDEA运行时加载provided依赖,并注意生产环境中应避免使用阻塞的keys *,改用scan命令。最终实现动态读取、实时打印,验证了Flink与Redis的数据集成能力。

木木的学习笔记 409
上一篇: redis--05分布式系统
下一篇: SpringMVC--01快速入门
sisyphoslee
博客等级 码龄7年 942粉丝 142原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值