Redis 笔记四

概要

1.高并发场景秒杀抢购超卖bug实战重现

2.阿里巴巴内部高并发秒杀下单方案首次揭秘

3.基于Reddis+MQ实现秒杀下单架构

4.10万订单每秒热点数据架构优化实践

5.秒杀下单MQ如何保证不丢失消息

6.解决MQ下单消息重复消费幂等机制详解

7.线上MQ百万秒杀订单发生积压如何处理

8.Redis集群崩溃如何保证秒杀系统高可用性

9.Redis主从切换导致库存同步异常以及超卖问题

10.MQ集群崩溃时,如何保证秒杀系统高可用性

11.秒杀链路种Redis和MQ如何保证事务一致性

12.秒杀系统限流防刷攻击静态页面等方案详解

1.高并发框架

三高架构一般指:高可用性、高并发性、高可扩展性

秒杀系统就属于一个三高架构,一般单独部署,防止由于其影响其他功能

场景介绍

        秒杀主要是实现一个减库存的操作,还有就是数据信息的访问。面对高并发场景,有可能会产生超卖问题。

根据前面的笔记: 这种情况可以通过添加分布式锁来解决超卖,但是加分布式锁会导致性能很难上去

如果不加锁,怎么解决超卖问题。

    public Integer updateStock(Long productId){
        //update product set stock = stock - 1 where id = 166 and stock >0
        return productDao.seckill(productId);
    }

    @Transactional
    public String seckill(Long productId,Long userId){
        Product product=get(productId);
        if(product.getStock()<=0){
            return "库存售完";
        }

        product.setStock(product.getStock()-1);
        update(product);
        //TODO 创建订单数据
        
        return "抢购成功";
    }

2.不加锁如何解决超卖问题

1.使用数据库的并发解决超卖问题

查看更新是否成功。能更新则更新,不能更新就失败——数据库乐观锁。

问题:但是数据库不能支撑每秒十万的情况,最多每秒几千。支撑不了高并发情况

    @Transactional
    public String seckill(Long productId,Long userId){
        Product product=get(productId);
        if(product.getStock()<=0){
            return "库存售完";
        }

//        product.setStock(product.getStock()-1);
//        update(product);
        
        Integer updateCount=updateStock(productId);
        if(updateCount<1){
            return "抢购失败";
        }
        
        //TODO 创建订单数据
        
        return "抢购成功";
    }

 2.阿里解决数据库性能瓶颈

源码改造,在数据库内部实现一个内存队列,一次性接收十万请求,但是数据库每次处理几千,多处理。——以此来提升性能问题。(一般的公司没有这个实力)

3.常规解大数据量访问问题:Redis+MQ

package com.example.controller;

import com.example.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class SeckillConntroller {
    @Autowired
    private ProductService productService;

    /**
     * 秒杀接口
     * 实现10万并发秒杀系统三高架构
     * @param productId 商品Id
     * @param userId 用户Id
     * @return
     */
    public String secKill(Long productId, Long userId){
        return productService.seckill(productId,userId);
    }
}

    @Transactional
    public String seckillRedis(Long productId,Long userId){
        String productStockKey = "stock:count:"+productId;
        Integer productStock = redisUtil.get(productStockKey,Integer.class);
        if(productStock<1){
            return "库存售完";
        }
        Long stockCount = redisUtil.decr(productStockKey,1);
        if(stockCount<0){
            redisUtil.incr(productStockKey);
            return "抢购失败";
        }
        //TODO 发送下单MQ,异步创建订单
        return "抢购成功";
    }

对于要秒杀的商品可以提前预热,下单时直接从redis里查,并发情况下减库存可能导致负数,所以要判断stockCount>0

下单是个异步的过程,否则前台会不断的转圈圈。直到订单生成。

当前系统还是不能支撑每秒十万,读写混合——最多每秒2万

3.Redis集群实现高并发

1.分片分散访问压力

redis集群架构将数据分片存储,理论上:只要节点足够多,将十万分到各个节点,基本能抗近10万并发

问题:redis将数据分散到各个节点时,恰好所有数据在一个节点上,性能又崩了,不足以支撑10W每秒

2.数据倾斜问题

redis 集群架构的数据倾斜:数据存在出在一个节点上,大量请求达到一个节点,这个节点压力非常大。

解决方案:预热及时发现数据倾斜,通过命令挪到其他节点上,数据迁移。如:hashTag前面{}里的值去hash,这样就可以控制hash结果了

3.热点商品

某一个商品特别热卖,导致大量访问访问一个商品,一个商品只在一个节点上,这就导致该节点访问压力暴增。——每秒十万并发又不行了。

解决方案:提前规划,在缓存预热时,就将其库存分在多个节点上,不同的分片

    @Transactional
    public String seckillRedis(Long productId,Long userId){
        String productStockKey = "stock:count:"+productId+"01";//02 03 数据分片存储
        Integer productStock = redisUtil.get(productStockKey,Integer.class);
        if(productStock<1){
            return "库存售完";
        }
        Long stockCount = redisUtil.decr(productStockKey,1);
        if(stockCount<0){
            redisUtil.incr(productStockKey);
            return "抢购失败";
        }
        //TODO 发送下单MQ,异步创建订单
        return "抢购成功";
    }

4.Redis集群架构+MQ

Redis+MQ可能存在哪些问题呢?

 可能存在的问题:MQ丢消息、消息积压、消费消息如何幂等。保证不丢消息?怎么做:ACK

1.MQ的简单实现

消息队列的两种模式及MQ简单实现_mq简易实现-CSDN博客

2.如何保证消费幂等

多并发可能存在的问题

如何保证幂等。https://www.cnblogs.com/wzh2010/p/15888523.html

重复消费问题(消费幂等):给每个操作MSG+唯一的ActId,保证消息不被重复消费。

                        有很多种4-5种方式,也可以用uuid, 但是uuid在性能上有影响

3.订单积压如何解决

订单排队被消费——前端一直转圈圈——会丢失客户的

1.增加消费者,加快消费速度

2.插入redis比DB快的多,如果发送时间已经很久了,积压状态——>走redis,查的时候,先数据库,后redis.

后台任务——redis——>DB

3.超过1min订单丢掉——>转1min就下单不成功,请重试——redis+1

4.降级服务

写到本地缓存|本地磁盘文件——记到日志文件;

不断访问redis,访问成功就将 定时记录的日志流水操作到redis和MQ里去

后台不断重试——数据绝对一致不可能,性能也是变差了

5.Redis集群整个崩了怎么办?

如果Redis集群整个崩了,如何保证可用性——要求保证99.9999%的概率可用,保证很小的出错概率。

Redis如果起不来,就使用备用redis集群,同步、切换。但是Redis集群切换可能存在的问题

redis异步同步——主节点-1,从节点没同步,主节点挂了,从节点变主节点——>超卖

解决方案一:问题不大|不解决——应为不能大批量超卖

解决方案二:一定要解决

1.用红锁

2.redis同步,改源码,性能下降

3.不要从节点,多个主节点

分布式架构CAP三个特性不可能全解决

6.MQ整个崩溃怎么办?

MQ集群崩溃咋办?2-3种方案——保证高可用

1.和redis一样

如何保证MQ的高可用_mq消息中间件如何保证高可用-CSDN博客

RocketMQ快速失败机制引发集群不稳定的思考和优化-CSDN博客

7.其他问题

        redis和MQ一致性怎么保证事务一致性。

        一套描述有很多其他的东西,很难。

        上亿流量又如何让解决呢。

redis,db,mq一致性_mqdb-CSDN博客

https://www.cnblogs.com/qingxuan0316/p/16594179.html

百度安全验证

百度安全验证

5.附加的概念

1.什么是雪花算法

雪花算法以及具体实现-CSDN博客

2.什么是多活架构

滴滴 Redis 异地多活的演进历程-CSDN博客

3.什么是接口限流

高并发处理之接口限流_api请求过快-CSDN博客

Rabbitmq消息积压问题如何解决以及如何进行限流_如何解决rabbitmq的消费积压问题-CSDN博客

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

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

相关文章

系统架构设计师教程(十九)大数据架构设计理论与实践

大数据架构设计理论与实践 19.1 传统数据处理系统存在的问题19.2 大数据处理系统架构分析19.2.1 大数据处理系统面临挑战19.2.2 大数据处理系统架构特征19.3 Lambda架构19.3.1 Lambda架构对大数据处理系统的理解19.3.2 Lambda架构应用场景19.3.3 Lambda架构介绍19.3.4 Lambda架…

ctfshow web71

开启环境&#xff1a; c?><?php $anew DirectoryIterator("glob:///*"); foreach($a as $f) {echo($f->__toString(). );} exit(0); ?> cinclude("/flagc.txt");exit();

解决方案—幻兽帕鲁Palworld私服部署 一杯茶的功夫搭建部署一个属于自己的游戏私服

《幻兽帕鲁》是Pocketpair开发的一款开放世界生存制作游戏 &#xff0c;游戏于2024年1月18日发行抢先体验版本&#xff0c;游戏中&#xff0c;玩家可以在广阔的世界中收集神奇的生物“帕鲁”&#xff0c;派他们进行战斗、建造、做农活&#xff0c;工业生产&#xff0c;游戏目前…

2024年10大软件开发趋势

随着 2024 年的到来&#xff0c;技术进步和不断变化的市场需求正在推动软件开发领域继续呈指数级增长。对于组织和工程师来说&#xff0c;及时了解这些模式不仅有用&#xff0c;而且是保持残酷和有效的基础。在本文中&#xff0c;我们研究了预计将在 2024 年产生巨大影响的关键…

韶关一高层住宅突发火灾 富维烟火识别防止悲剧发生

近日&#xff0c;韶关市一高层住宅楼突发火灾&#xff0c;幸亏及时得到控制&#xff0c;未造成重大伤亡。这一事件再次提醒我们&#xff0c;高层建筑的火灾安全不容忽视。针对这一问题&#xff0c;北京富维图像公司的FIS智能图像识别系统显得尤为重要。 FIS系统利用已部署的监控…

Java多线程--线程的安全问题与线程的同步机制介绍

文章目录 一、线程安全问题&#xff08;1&#xff09;介绍&#xff08;2&#xff09;同一个资源问题和线程安全问题1、方式一&#xff1a;实现Runnable接口1.1 票数问题1.2 重票和错票问题 2、方式二&#xff1a;继承Thread类 二、安全问题分类总结&#xff08;1&#xff09;局…

如何使用宝塔面板搭建MySQL 5.5数据库并实现公网远程连接

文章目录 前言1.Mysql服务安装2.创建数据库3.安装cpolar3.2 创建HTTP隧道 4.远程连接5.固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 前言 宝塔面板的简易操作性,使得运维难度降低,简化了Linux命令行进行繁琐的配置,下面简单几步,通过宝塔面板cp…

当包容结构体遇见灵活的内存管理

&#x1f308;个人主页&#xff1a;小田爱学编程 &#x1f525; 系列专栏&#xff1a;c语言从基础到进阶 &#x1f3c6;&#x1f3c6;关注博主&#xff0c;随时获取更多关于c语言的优质内容&#xff01;&#x1f3c6;&#x1f3c6; &#x1f600;欢迎来到小田代码世界~ &#x…

MVCC原理讲解(深入浅出)

目录 一、什么是MVCC 二、当前读、快照读都是什么鬼 三、当前读 四、快照读 五、数据库的并发场景 六、MVCC解决并发的哪些问题 1.解决问题如下&#xff1a; 七、MVCC的实现原理 1.版本链 八、undo日志 1.undo log 的用途 2.undo log主要分为两种 九、Read View…

HCIP寒假第8次作业

第一步把ipv4网络配通 [r1]int g0/0/0 [r1-GigabitEthernet0/0/0]ip add 12.1.1.1 24 [r1-GigabitEthernet0/0/0]int l0 [r1-LoopBack0]ip add 1.1.1.1 32 [r1]ospf 1 router-id 1.1.1.1 [r1-ospf-1]area 0 [r1-ospf-1-area-0.0.0.0]network 0.0.0.0 255.255.255.255[r2]int g…

Linux使用匿名管道实现进程池得以高效通信

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;Nonsense—Sabrina Carpenter 0:50━━━━━━️&#x1f49f;──────── 2:43 &#x1f504; ◀️ ⏸ ▶️ …

Unity 外观模式(实例详解)

文章目录 示例1&#xff1a;初始化游戏场景中的多个子系统示例2&#xff1a;管理音频播放示例3&#xff1a;场景加载流程示例4&#xff1a;UI管理器示例5&#xff1a;网络服务通信 在Unity中使用外观模式&#xff08;Facade&#xff09;时&#xff0c;主要目的是为了简化复杂子…

Android创建工程

语言选择Java&#xff0c;我用的Java 最小SDK&#xff1a;就是开发的APP支持的最小安卓版本 Gradle 是一款Google 推出的基于 JVM、通用灵活的项目构建工具&#xff0c;支持 Maven&#xff0c;JCenter 多种第三方仓库;支持传递性依赖管理、废弃了繁杂的xml 文件&#xff0c;转而…

如何快速掌握DDT数据驱动测试?

前言 网盗概念相同的测试脚本使用不同的测试数据来执行&#xff0c;测试数据和测试行为完全分离&#xff0c; 这样的测试脚本设计模式称为数据驱动。(网盗结束)当我们测试某个网站的登录功能时&#xff0c;我们往往会使用不同的用户名和密码来验证登录模块对系统的影响&#x…

2023年:个人年度成长与团队协作成就

文章目录 个人职业发展的喜悦团队成就的辉煌公众号CSDN申请了移动安全领域新星创作者获得6月城市之星北京TOP 10获得23年博客之星TOP 41年度总结 知识星球 开拓新领域的决心免费知识大陆付费知识大陆 展望未来福利时间知识星球会员一年知识星球立减88券 在这个充满挑战与机遇的…

Linux 挂载读取、卸载 ntfs格式硬盘

windows常用的ntfs硬盘分区格式&#xff0c;在linux通常不能直接读取&#xff0c;不过挂载也是非常容易 一、挂载ntfs分区 1.安装 apt-get install ntfs-3g2.查看现在接上的硬盘 fdisk -l可以找到类似如下的&#xff0c;会显示microsoft basic data 3.创建挂载的目录 创…

全能相似度计算与语义匹配搜索工具包,多维度实现多种算法,涵盖文本、图像等领域。支持文图搜索,满足您在不同场景下的搜索需求

全能相似度计算与语义匹配搜索工具包,多维度实现多种算法,涵盖文本、图像等领域。支持文图搜索,满足您在不同场景下的搜索需求。 Similarities:精准相似度计算与语义匹配搜索工具包,多维度实现多种算法,覆盖文本、图像等领域,支持文搜、图搜文、图搜图匹配搜索 Similar…

腾讯云超60款产品,限时免费试用!

懂行的开发同学都应该知道&#xff0c;腾讯云的产品嘎嘎好用&#xff01; 很多同学只能眼红&#xff0c;却不能体验一二。毕竟付费的门槛在那里&#xff0c;体验不到&#xff0c;自然没办法做出评价。 今天&#xff0c;开放10个免费体验产品的名额给你&#xff0c;想体验哪款…

4核16G幻兽帕鲁服务器优惠价格表,阿里云和腾讯云报价

幻兽帕鲁服务器价格多少钱&#xff1f;4核16G服务器Palworld官方推荐配置&#xff0c;阿里云4核16G服务器32元1个月、96元3个月&#xff0c;腾讯云幻兽帕鲁服务器服务器4核16G14M带宽66元一个月、277元3个月&#xff0c;8核32G22M配置115元1个月、345元3个月&#xff0c;16核64…

【文本到上下文 #7】探索 NLP 中的 Seq2Seq、编码器-解码器和注意力机制

一、说明 今天&#xff0c;我们将探讨序列到序列 &#xff08;seq2seq&#xff09; 模型的复杂工作原理&#xff0c;特别关注编码器-解码器架构和注意力机制。这些概念是各种 NLP 应用的基础&#xff0c;从机器翻译到问答系统。 这是可以期待的&#xff1a; Seq2Seq模型中的编码…
最新文章