根据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 优惠券秒杀逐步优化相关推荐

  1. 【Redis学习05】优惠券秒杀及其优化

    文章目录 1. 全局唯一ID 1.1 全局唯一ID介绍及生成策略 1.2 代码实现 1.3 总结 2. 优惠券秒杀下单 2.1 添加优惠券 2.2 优惠券秒杀功能 3. 超卖问题 3.1 问题分析 3 ...

  2. Redis优惠券秒杀 | 黑马点评

    目录 一.全局唯一ID 1.全局ID生成器 二.实现秒杀下单 1.基本的下单功能 2.超卖问题 3.乐观锁解决并发问题 三.实现一人一单 1.思路分析 2.代码初步实现 3.关于锁的范围 4.关于事务 ...

  3. Redis 基础 - 优惠券秒杀《初步优化(异步秒杀)》

    Redis基础 - 基本类型及常用命令 Redis基础 - Java客户端 Redis 基础 - 短信验证码登录 Redis 基础 - 用Redis查询商户信息 Redis 基础 - 优惠券秒杀< ...

  4. SpringBoot整合Redis实现优惠券秒杀服务(笔记+优化思路版)

    本文属于看黑马的redis的学习笔记,记录了思路和优化流程,精简版最终版请点击这里查看. 文章目录 一.全局ID生成器 1.1 理论 1.1.1 全局唯一ID生成策略 1.2 代码(Redis自增) ...

  5. Redis(4)优惠券秒杀

    优惠券秒杀 全局ID生成器 优惠券秒杀 秒杀实现 库存超卖 乐观锁实现 一人一单 分布式锁 分布式锁版本一 Redis分布式锁误删情况 解决分布式锁误删 分布式锁原子性问题 解决原子性问题 利用Jav ...

  6. 【使用Redis分布式锁实现优惠券秒杀功能】-Redis学习笔记05

    前言 本章节主要实现限时.限量优惠券秒杀功能,并利用分布式锁解决<超卖问题>.<一人一单问题>. 一.优惠券下单基本功能实现 1.功能介绍及流程图 2.代码实现 @Resour ...

  7. Redis应用案例之优惠券秒杀

    概述 秒杀下单流程 下单核心思路:当我们点击抢购时,会触发右侧的请求,我们只需要编写对应的controller即可. 秒杀下单应该思考的内容: 下单需要判断两点: 秒杀是否开始或结束,如果尚未开始或已 ...

  8. Redis实现优惠券秒杀

    优惠券秒杀 全局唯一ID 问题 当用户抢购时,就会生成订单并保存到tb_voucher_order这张表中,而订单表如果使用数据库自增ID就存在一些问题 id的规律性太明显 受单表数据量的限制 解决办 ...

  9. Redis实战篇--优惠券秒杀

    文章目录 Redis实战篇--优惠券秒杀 全局唯一ID 实现优惠券秒杀下单 超卖问题 一人一单 分布式锁 基于redis的分布式锁 Redis实战篇–优惠券秒杀 全局唯一ID 为什么需要全局唯一id? ...

最新文章

  1. 先搞懂这八大基础概念,再谈机器学习入门!
  2. css 背景效果_css基础篇06--背景样式
  3. NetSetMan IP地址切换工具
  4. qt5.6.3版本移植arm
  5. TranslateMessage ,GetMessage, DispatchMessage分析
  6. 转圈游戏(luogu 1965)
  7. java的static类_java中staticclass静态类详解
  8. Win7系统关闭兼容性选项的方法
  9. bzoj4009: [HNOI2015]接水果(整体二分)
  10. 911计算机专业基础综合,青岛大学10数据结构911计算机专业综合
  11. PyTorch学习笔记(五):模型定义、修改、保存
  12. pdf怎么设置密码?
  13. Windows下ab压力测试工具的模拟表单提交使用
  14. ROS通信机制~话题通信(PublisherSubscriber)·笔记2
  15. 用R来求解一元二次方程
  16. 大家都在做直播,陌陌做的这个有什么不同?
  17. 人类和海洋动物的相似之处
  18. 为GET和POST请求添加请求参数和请求头
  19. OpenStack Ocata 安装(六)安装仪表盘(Dashboard)
  20. Android 多线程断点下载demo实现

热门文章

  1. The 12th tip of DB Query Analyzer, powerful in text file process
  2. 黑客电影《我是谁:没有绝对安全的系统》正片(含下载)
  3. 小米手机 怪诞行为经济学
  4. RT-Thread柿饼控件(4)-- Card
  5. 实现发送xml格式的请求
  6. seo和sem是什么意思
  7. 【阿里天猫精灵专题】TB-02 RGB冷暖灯控制
  8. Argument(s) are different! Wanted:
  9. mysql 是否支持Unix系统_在UNIX系统下安装MySQL
  10. PCIe5.0的Add-in-Card(AIC)金手指layout建议(三)