【Java 实战】通过Redis 和 MQ 简单实现秒杀功能

2023-05-16

项目场景

实现一个商品秒杀的功能,能后台自定义秒杀时间段、商品库存等信息。

一、设计思路

这里简单分享下思路:

1.限流

秒杀时大量用户会在同一时间同时进行抢购,网站瞬时访问流量激增,由于只有少部分用户能够秒杀成功,所以要限制大部分流量,只允许少部分流量进入服务后端。这里使用基于Redis简单粗暴的限流方案:信号量(Semaphore)

信号量就是可以被 多个线程同时持有 的 一种同步对象,比如我设置一个值为5的计数信号量,那么现在有十个线程来获取他就只会有五个可以成功,剩下那五个则获取失败。

所以说如果有个计数信号量定义的值是1,那么他其实就等同于 mutex (互斥锁)

2.具体流程

这里首先需要明确如何缓存秒杀的商品信息?

  • 这里是根据秒杀活动状态来缓存秒杀的商品信息,上下架秒杀活动就会将商品信息缓存到Redis中。
  • 秒杀成功使用消息队列发送订单信息,RabbitMQ监听器在接受到消息后,将订单信息写入数据库。
  • 在秒杀时使用redisson对商品信息上锁,由于打算使用信号量,而信号量本质就是一种锁,所以不用再加锁。

二、数据库设计

1.秒杀活动表

存储秒杀活动信息seckill_info

字段 描述
id(varchar)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Java 实战】通过Redis 和 MQ 简单实现秒杀功能 的相关文章

  • 水下潜航器的建模与控制

    线性系统理论大作业 待完成 题目 水下潜器模型 xff0c 可能是潜艇或者鱼雷等对象 一个主推进螺旋桨 xff0c 前后两对水平陀翼 xff0c 后面一对垂直陀翼 潜器前进过程中 xff0c 通过调节助推进螺旋桨推力 xff0c 以及三对陀
  • 演化博弈、复制动态方程与仿真

    本文只整理和总结一下我的理解 xff0c 文末列出了可供参考的更详细完整的资料 建议先看参考资料 1 xff08 博弈论公开课 xff09 的博弈论课程 xff0c 可以直接从第11讲开始看 参考链接 2 是关于演化博弈非常经典的一本书 参
  • 演化博弈方法用于多智能体系统最优资源分配

    演化博弈方法用于多智能体系统最优资源分配 Evolutionary game theoretic approach for optimal resource allocation in multi agent systems 论文复现见 论
  • [论文复现]演化博弈方法用于多智能体系统最优资源分配

    原文 演化博弈方法用于多智能体系统最优资源分配 CSDN博客 https ieeexplore ieee org document 8243778 问题描述 有2种资源分配给6个个体 xff0c 2种资源的总量分别为 y 1 61 545
  • 基于博弈学习的分布式卫星任务规划

    基于博弈学习的分布式卫星任务规划 Distributed Satellite Mission Planning via Learning in Games 摘要 对地观测卫星群的任务规划是一个复杂的问题 xff0c 它提出了重大的理论和技术
  • 多星分布式任务分配中的博弈自组织

    多星分布式任务分配中的博弈自组织 Game theoretic self organization in multi satellite distributed task allocation 论文复现见 论文复现 多星分布式任务分配中的博
  • 自用的矩阵运算库zhnmat使用说明

    自用的矩阵运算库zhnmat使用说明 包含两个主要类 xff1a Mat和Vector3d xff0c 可以用于一些简单的矩阵和三维向量场景 xff0c 代码较简单 xff0c 没有任何性能优化 xff0c 可用于学习参考 代码仓库 htt
  • 非线性系统的反馈线性化

    仿射非线性或非仿射非线性指对输入是否是线性的 例如 xff0c 系统能够写成 x 61 f x
  • 基于特征模型的全系数自适应控制

    摘要 xff1a 首先推导了全系数和等于1的证明过程 xff0c 分析了等效时间常数的概念 xff0c 然后推导了递推最小二乘公式并用于参数辨识的方法 xff0c 最后给几个仿真的例子 全系数之和等于1 被控对象用微分方程 y n
  • raylib一些示例代码

    摘要 xff1a 几种相机视角 3D预览图视角 xff1a 鼠标拖动 xff0c 滚轮缩放 只能沿着中心点 第一视角 xff1a WSAD分别控制视角的前后左右移动 xff0c EQ分别控制上下移动 xff0c 滚轮控制移动速度 画正方体线
  • gnome session 中的开机启动程序配置文件

    我找了很久才找到的 xff1a 管理员状态下 xff1a linux Blue home library config autostart ls gnome terminal desktop stardict desktop 我开机启动的两
  • 使用深度Q网络(Deep Q Network)学习控制倒立摆

    使用深度Q网络 Deep Q Network 学习控制单摆 原文 xff1a https qiita com ashitani items bb393e24c20e83e54577 摘要 xff1a 我们将尝试使用Deep Q网络 xff0
  • python多次调用exe文件运行不同的结果

    摘要 xff1a 有个C 43 43 项目是读取配置参数文件并打印对应的结果 xff0c 后来需要多次修改配置文件并运行 xff0c 于是想到写个python脚本执行这一过程 写一个测试项目 xff0c 项目结构如下 xff1a 根目录 m
  • Python通过SWIG调用C++时出现的ImportError问题解析

    摘要 win10系统 xff0c 编译器为mingw xff0c 按照教程封装C 43 43 的一个类并用python调用 xff0c 一步步进行直到最后一步运行python代码时 xff0c 在python代码中import exampl
  • 基于Android设备获取USB外接摄像头的图像

    目录 背景开发环境硬件软件 简介那我们开始吧导入项目布局 权限与初始化MainActivity java运行时遇到的问题 运行结果其他 背景 本人在读研期间接到的项目 xff0c 需要用一个工业内窥镜 xff08 支持USB和Type C接
  • Python爬取百度搜索结果(标题,摘要,链接)

    近期想要爬取百度搜索的结果 xff0c 网上的教程一直没有找到可以直接用的 xff0c 尝试了几个小时终于摸索出了可以用的代码 主要的问题在于 url 的形式 xff0c 之前的教程一般是这种形式 xff1a url 61 39 https
  • ubuntu 14.04 安装chrome,无法正常启动解决(亲测)。

    1 进入 Ubuntu 14 04 桌面 xff0c 按下 Ctrl 43 Alt 43 t 键盘组合键 xff0c 启动终端 2 在终端中 xff0c 输入以下命令 xff1a sudo wget https repo fdzh org
  • 搭建ftp并设置用户名和密码

    第一步 xff1a 启用 IIS 服务 步骤一 打开控制面板 点击 34 开始 34 xff08 或者按键盘上的微软徽标键 xff0c 通常在左侧 Ctrl 键和 Alt 键之间 xff09 xff0c 在打开的 34 开始菜单 34 中
  • FTPClient ftp.storeFile上传文件时服务器无响应的原因

    用FTPClient做FTP上传 xff0c 由quartz来定时运行 xff08 2分钟一次 xff09 xff0c 之前在生产环境调试没问题 xff0c 一些时间后现场反馈不能上传了 xff0c 当出现10个扫描文件的日志后就不再出现了
  • 解决Unable to add window -- token android.os.BinderProxy is not valid; is your activity running?

    原因一般是展示dialog的时候用的是异步 xff0c 或者是另开一个线程 当Activity已经关闭 xff0c 才调用dialog show xff0c 此时Activity已经不存在 xff0c 必然报错 解决办法 xff1a 可以添

随机推荐