redis 优惠券秒杀逐步优化
根据redis set nx实现分布式锁,防止同一用户多次请求引起的多个线程同时下单,同时保证分布式系统下也不能同时下单,根据用户创建唯一key,然后进行加锁,设置锁过期时间,防止运行过程中出现意外错误导致的死锁问题,释放锁的时候也添加的判断逻辑,判断是否释放的是当前线程加的锁,只有当前线程添加的锁才会被释放,由于判断从redis中获取判断结果和在java当前线程下判断结果的非原子性,使用lua脚本解决释放锁的时候出现的并发安全问题,保证原子性。
同时redis集群能够保证改锁的高可用性和高并发性。
基于乐观锁解决库存超卖问题。
setnx不可重入,不能重试(获取锁只尝试一次),超时释放(如果执行时间过长也会释放),主从一致性问题
redission Redis的基础上实现的Java驻内存数据网格, 提供了分布式服务
可重入锁利用hash结构记录线程id和重入次数
利用watchdog监控线程,每隔一段时间重置超时等待时间
重试利用信号量等待唤醒,获取锁失败进入等待,当有其他线程释放锁的时候再唤醒
(在这里可以关联java并发编程)。
多个独立节点必须都获得锁才算成功。
把库存预先存入redis,通过lua脚本进行秒杀操作的同时保证操作原子性,并且记录用户id信息,通过消息队列将订单信息,库存异步存入数据库,削峰。
,使用
压测1000个线程同时访问等待时间变为原来2/5,从507-216,吞吐量1.4倍
使用stream消息队列110 1577
阻塞队列BlockingQueue,解除耦合
内存溢出阻塞队列内存限制,数据安全问题,丢失任务
List消息队列,持久化,利用Redis存储,不是用jvm内存,不直接,解决不了消息丢失问题,只支持单消费者
pubsub可以被多个消费者消费,不支持数据持久化,消息堆积有上限,缓存在消费者,jvm内存溢出
XREAD存在漏读风险,单消费者模式
基于Stream消费者组,读一个消息确认一个消息,从pendinglist中能获取到为确认的消息,支持多消费者,
消息确认机制消息回溯
Stream 不能保证万无一失,不支持生产者发送消息,消息的事务机制
redis 优惠券秒杀逐步优化相关推荐
- 【Redis学习05】优惠券秒杀及其优化
文章目录 1. 全局唯一ID 1.1 全局唯一ID介绍及生成策略 1.2 代码实现 1.3 总结 2. 优惠券秒杀下单 2.1 添加优惠券 2.2 优惠券秒杀功能 3. 超卖问题 3.1 问题分析 3 ...
- Redis优惠券秒杀 | 黑马点评
目录 一.全局唯一ID 1.全局ID生成器 二.实现秒杀下单 1.基本的下单功能 2.超卖问题 3.乐观锁解决并发问题 三.实现一人一单 1.思路分析 2.代码初步实现 3.关于锁的范围 4.关于事务 ...
- Redis 基础 - 优惠券秒杀《初步优化(异步秒杀)》
Redis基础 - 基本类型及常用命令 Redis基础 - Java客户端 Redis 基础 - 短信验证码登录 Redis 基础 - 用Redis查询商户信息 Redis 基础 - 优惠券秒杀< ...
- SpringBoot整合Redis实现优惠券秒杀服务(笔记+优化思路版)
本文属于看黑马的redis的学习笔记,记录了思路和优化流程,精简版最终版请点击这里查看. 文章目录 一.全局ID生成器 1.1 理论 1.1.1 全局唯一ID生成策略 1.2 代码(Redis自增) ...
- Redis(4)优惠券秒杀
优惠券秒杀 全局ID生成器 优惠券秒杀 秒杀实现 库存超卖 乐观锁实现 一人一单 分布式锁 分布式锁版本一 Redis分布式锁误删情况 解决分布式锁误删 分布式锁原子性问题 解决原子性问题 利用Jav ...
- 【使用Redis分布式锁实现优惠券秒杀功能】-Redis学习笔记05
前言 本章节主要实现限时.限量优惠券秒杀功能,并利用分布式锁解决<超卖问题>.<一人一单问题>. 一.优惠券下单基本功能实现 1.功能介绍及流程图 2.代码实现 @Resour ...
- Redis应用案例之优惠券秒杀
概述 秒杀下单流程 下单核心思路:当我们点击抢购时,会触发右侧的请求,我们只需要编写对应的controller即可. 秒杀下单应该思考的内容: 下单需要判断两点: 秒杀是否开始或结束,如果尚未开始或已 ...
- Redis实现优惠券秒杀
优惠券秒杀 全局唯一ID 问题 当用户抢购时,就会生成订单并保存到tb_voucher_order这张表中,而订单表如果使用数据库自增ID就存在一些问题 id的规律性太明显 受单表数据量的限制 解决办 ...
- Redis实战篇--优惠券秒杀
文章目录 Redis实战篇--优惠券秒杀 全局唯一ID 实现优惠券秒杀下单 超卖问题 一人一单 分布式锁 基于redis的分布式锁 Redis实战篇–优惠券秒杀 全局唯一ID 为什么需要全局唯一id? ...
最新文章
- 先搞懂这八大基础概念,再谈机器学习入门!
- css 背景效果_css基础篇06--背景样式
- NetSetMan IP地址切换工具
- qt5.6.3版本移植arm
- TranslateMessage ,GetMessage, DispatchMessage分析
- 转圈游戏(luogu 1965)
- java的static类_java中staticclass静态类详解
- Win7系统关闭兼容性选项的方法
- bzoj4009: [HNOI2015]接水果(整体二分)
- 911计算机专业基础综合,青岛大学10数据结构911计算机专业综合
- PyTorch学习笔记(五):模型定义、修改、保存
- pdf怎么设置密码?
- Windows下ab压力测试工具的模拟表单提交使用
- ROS通信机制~话题通信(PublisherSubscriber)·笔记2
- 用R来求解一元二次方程
- 大家都在做直播,陌陌做的这个有什么不同?
- 人类和海洋动物的相似之处
- 为GET和POST请求添加请求参数和请求头
- OpenStack Ocata 安装(六)安装仪表盘(Dashboard)
- Android 多线程断点下载demo实现
热门文章
- The 12th tip of DB Query Analyzer, powerful in text file process
- 黑客电影《我是谁:没有绝对安全的系统》正片(含下载)
- 小米手机 怪诞行为经济学
- RT-Thread柿饼控件(4)-- Card
- 实现发送xml格式的请求
- seo和sem是什么意思
- 【阿里天猫精灵专题】TB-02 RGB冷暖灯控制
- Argument(s) are different! Wanted:
- mysql 是否支持Unix系统_在UNIX系统下安装MySQL
- PCIe5.0的Add-in-Card(AIC)金手指layout建议(三)