首页 > 其他分享 >秒杀优化(阻塞队列实现)

秒杀优化(阻塞队列实现)

时间:2023-10-26 23:32:15浏览次数:36  
标签:异步 队列 Redis 阻塞 线程 下单 秒杀

秒杀优化(阻塞队列实现)_秒杀

库存使用Redis的string类型进行存储

下单人使用Redis的set类型进行存储,set类型中数据不可重复

秒杀优化(阻塞队列实现)_秒杀_02

1.将优惠券数据存放到Redis中,通过Lua脚本实现对库存是否充足,用户是否下单,以及扣减库存的操作,Lua脚本时原子性的,要么成功,要么失败。

2.开启异步线程,将数据存入数据库中,并发性能提高,秒杀耗时减少

秒杀优化(阻塞队列实现)_秒杀_03

什么是阻塞队列

在数据结构中,队列遵循FIFO(先进先出)原则。在java中,Queue接口定义了定义了基本行为,由子类完成实现,常见的队列有ArrayDeque、LinkedList等,这些都是非线程安全的,在java 1.5中新增了阻塞队列,当队列满时,添加元素的线程呈阻塞状态;当队列为空时,获取元素的线程呈阻塞状态。

优化思路

①先利用Redis完成库存余量、一人一单判断,完成抢单业务

②再将下单业务放入阻塞队列,利用独立线程异步下单


基于阻塞队列的异步秒杀存在哪些问题?

●内存限制问题

●数据安全问题

标签:异步,队列,Redis,阻塞,线程,下单,秒杀
From: https://blog.51cto.com/AmbitionGarden/8044257

相关文章

  • 利用 zookeeper 的分布式锁实现秒杀
    常见的业务场景:x年x月x日x点x分x秒,限时抢购10件商品。前提:分布式的环境,多用户高并发访问。依赖的jar包<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0htt......
  • 堆栈模拟队列
    堆栈模拟队列题目大意PTA上的一道题,详题见文末。设已知有两个堆栈S1和S2,请用这两个堆栈模拟出一个队列Q。输入:32A1A2A3A4A5DA6DA7DA8DDDDT输出:ERROR:Full1ERROR:Full23478ERROR:Empty思路最开始设想的是将长度小的栈作为存储栈,长度大......
  • 灵活、可用、高扩展,EasyMR 带来全新 Yarn 的队列管理功能及可视化配置
    YARN(YetAnotherResourceNegotiator)是Hadoop生态系统中的资源调度器,主要用于资源管理和作业调度。YARN自身具备队列管理功能,通过对YARN资源队列进行配置和管理,实现集群资源的分配,以满足不同应用和用户的需求。YARN的引入为集群在利用率、资源统一管理和数据共享等方面带来......
  • Java双端队列Deque简述
    概述​ Deque是一个双端队列接口,继承自Queue接口,Deque的实现类是LinkedList、ArrayDeque、LinkedBlockingDeque,其中LinkedList是最常用的。​ Deque是一个线性collection,支持在两端插入和移除元素。名称deque是“doubleendedqueue(双端队列)”的缩写,通常读为“deck”。大多数......
  • Java队列Queue简述
    概述​ Queue是java中实现队列的接口,它总共只有6个方法,我们一般只用其中3个就可以了。Queue的实现类有LinkedList和PriorityQueue。最常用的实现类是LinkedList。Queue的6个方法分类抛出异常返回特殊值插入add(e)offer(e)删除remove()poll()检查element(......
  • Redis 6 学习笔记 4 —— 通过秒杀案例,学习并发相关和apache bench的使用,记录遇到的问
    背景这是某硅谷的redis案例,主要问题是解决计数器和人员记录的事务操作按照某硅谷的视频敲完之后出现这样乱码加报错的问题 乱码的问题要去tomcat根目录的conf文件夹下修改logging.properties,把下面两个encoding参数都改成GBK就行。其实错误也很明显(ClassNotFoundExceptio......
  • 小白学算法-数据结构和算法教程: 队列的应用
    检查给定图是否是二分图二分图是一种图,其顶点可以分为两个独立的集合U和V,使得每条边(u,v)要么连接从U到V的顶点,要么连接从V到U的顶点。换句话说,对于每个边(u,v),要么u属于U,v属于V,要么u属于V,v属于U。我们也可以说,不存在连接同一集合的顶点的边。如果图着色......
  • RabbitMq---延时队列
    应对场景订单创建后--->开始锁库存而如果之后的服务出现异常,在订单创建的簇点会自动设置逻辑来处理但是之后解锁库存则需要延时队列来解决采用定时任务检查的话有以下问题:时效性(存在较大的时间误差):即使订单支付倒计时30min但是可能你正好在定时任务检查之后的1min时创......
  • 3.2 队列
    3.2.1队列的基本概念 注:数据结构三要素――逻辑结构、数据的运算、存储结构(物理结构> 栈(Stack)是只允许在一端进行插入或删除操作的线性表队列(Queue)是只允许在一端进行插入,在另一端删除的线性表重要术语:队头、队尾、空队列 队列的特点:先进先出FirstlnFirsto......
  • 学会 CompletableFuture:让你的代码免受阻塞之苦!
    来源:https://juejin.cn/post/6844904024332828685写在前面通过阅读本篇文章你将了解到:CompletableFuture的使用CompletableFure异步和同步的性能测试已经有了Future为什么仍需要在JDK1.8中引入CompletableFutureCompletableFuture的应用场景对CompletableFuture的使用优化......