Redis优化秒杀系统

使用背景:
普通的基于mss框架的系统在并发量不是很高的情况下,对redis的需求不是很高。redis在系统中的角色相当于一个对象缓存器,在高并发的系统中(比如秒杀系统),在某一刻对数据库中的一条数据可能是成千上万的用户同时去访问,系统的用户体验度直接受到数据库的性能的影响。为了保证数据的完整性,用户只能串行访问数据库中的某一条记录。redis则是把记录对应的对象序列化存储在自身的容器中,减少数据库的压力。

下面就和大家来一起探讨下如何进行优化。
废话不多说首先奉献上小Demo。

下面来分析demo 如何进行一个优化操作。

首先sql方面一个要控制超卖问题。
数据会执行一个行锁,不会让sql去并行执行,都会是串行去执行。
下面可以利用redis 进行简易的优化。


Redis,是单线程的,就会很多并发,也是串行执行,但是这个会有什么问题呢?(**如果代码抛异常,如下单的时候抛异常会导致缓存不一致的问题解决思路 出现异常去还原问题。)

上面代码还有什么问题呢(库存加一还是负值,比如很多请求进来以后,但是很多下单不成功的请求,会导致只有一个还原成功,其他还原不成功。)

但是还会有什么问题呢。(如果库存只有100,并发1万的话,会造成很多的无效数据进入redis,造成redis压力过大。)

加一个jvm层数的ConcurrentMap,list

来存储卖完的标志,如果redis 中库存值为0,则直接返回,防止无效数据来进入redis。
又会提升一个层次。但是又会有什么问题呢。

抛出问题只会应该也回退map问题。

这个可以加上map.直接发送商品ID,异常再去数据库下订单。

这个的优化如果在nginx分发多个tomcat服务下。Jvm级别缓存不同步。但是最终的根据逻辑往下走都会变为map都会为true.(但是还会有什么问题呢)

如果发送mq以及数据库会有问题的话,会回退这个map,而nginx会进入其他的tomcat服务,导致一直下单不成功的问题。(用zookeeper解决)

观察者模式。

ZOOkeerper监听机制讲解

监听通知机制

注:需要自己去根据对应逻辑实现对应方法。

如何做jvm缓存同步。
配置bean.实现wtacher 方法



当商品售完需要修改。

报错时修改为false。然后zookeeper监听机制如果发生变回,会直接remove掉内存中map的值。

以上学习后的一个简要思想。欢迎大家参与沟通。一起学习进步。

Redis优化秒杀系统相关推荐

  1. 基于Redis实现秒杀系统

    系统架构 客户端发起秒杀请求,请求经网关处理转发到对应的服务节点上,进行业务层处理,最后数据入库. 业务处理: 验证秒杀活动是否已经开启: 对流量进行限制: 验证订单信息(验证重复秒杀.验证库存是否足 ...

  2. 如何利用redis实现秒杀系统

    文章目录 题记 利用Watch实现Redis乐观锁 题记 在线思维导图总结:redis大纲 利用Watch实现Redis乐观锁 乐观锁基于CAS(Compare And Swap)思想(比较并替换), ...

  3. java设计前期工作基础和存在的困难_Java秒杀系统实战系列-基于Redisson的分布式锁优化秒杀逻辑...

    本文是"Java秒杀系统实战系列文章"的第十五篇,本文我们将借助综合中间件Redisson优化"秒杀系统中秒杀的核心业务逻辑",解决Redis的原子操作在优化秒 ...

  4. Java秒杀系统实战系列~基于Redisson的分布式锁优化秒杀逻辑

    摘要: 本篇博文是"Java秒杀系统实战系列文章"的第十五篇,本文我们将借助综合中间件Redisson优化"秒杀系统中秒杀的核心业务逻辑",解决Redis的原子 ...

  5. 【高并发】Redis如何助力高并发秒杀系统?看完这篇我彻底懂了!!

    秒杀业务 在电商领域,存在着典型的秒杀业务场景,那何谓秒杀场景呢.简单的来说就是一件商品的购买人数远远大于这件商品的库存,而且这件商品在很短的时间内就会被抢购一空.比如每年的618.双11大促,小米新 ...

  6. 实践出真知:全网最强秒杀系统架构解密!!

    很多小伙伴反馈说,高并发专题学了那么久,但是,在真正做项目时,仍然不知道如何下手处理高并发业务场景!甚至很多小伙伴仍然停留在只是简单的提供接口(CRUD)阶段,不知道学习的并发知识如何运用到实际项目中 ...

  7. 实践出真知:全网最强秒杀系统架构解密

    很多小伙伴反馈说,高并发专题学了那么久,但是,在真正做项目时,仍然不知道如何下手处理高并发业务场景!甚至很多小伙伴仍然停留在只是简单的提供接口(CRUD)阶段,不知道学习的并发知识如何运用到实际项目中 ...

  8. 解密秒杀系统架构,不是所有的系统都能做秒杀!

    摘要:教你如何设计一个秒杀系统架构:从电商系统架构到秒杀系统.从高并发"黑科技"与致胜奇招到服务器硬件优化,全方位立体掌握秒杀系统架构!! 本文分享自华为云社区<实践出真知: ...

  9. 万字详解秒杀系统!!

    大家好,我是捡田螺的小男孩~ 今天推荐冰河老哥一篇干货 很多小伙伴反馈说,高并发专题学了那么久,但是,在真正做项目时,仍然不知道如何下手处理高并发业务场景!甚至很多小伙伴仍然停留在只是简单的提供接口( ...

最新文章

  1. Linux下 WiFi rtl 移植,IMX6Q Linux WIFI+BT(RTL8723au)模块移植问题
  2. RTEMS文件系统(4):系统调用开发信息(上)
  3. Spring:源码解读Spring IOC原理
  4. hdu5105给你一个方程,让你求极值(直接暴力)
  5. 开启 J2EE(七)— Model1、Model2和三层架构的演变
  6. java虚拟机如何判断两个类相同_你有没有想过: Java 虚拟机是如何判断两个对象是否相同的?判断的流程是什么?...
  7. Spark学习笔记:数据读取和保存
  8. [导入]设计模式初学者系列-工厂方法
  9. python 浏览器自动化 弹窗控制_Selenium2+Python自动化-处理浏览器弹窗(转载)
  10. HuggingFace学习2:使用Bert模型训练文本分类任务
  11. 荣耀老熊科普荣耀9X升降全面屏 一升一降皆是技术的沉淀
  12. Java 系统工具类 —— System、Scanner、Runtime
  13. perl中的文件句柄
  14. sql常用函数详解(一)——字符串截取
  15. python 从入门到实践_Python编程从入门到实践日记Day36
  16. 后盾网php多少钱_后盾网php视频教程:2020最热的8个后盾网免费php视频教程
  17. rtl8201以太网卡调试
  18. 水平线标记的用法和属性
  19. 设置笔记本电脑插入USB鼠标时,自动禁用触摸板
  20. KafKa 开启 SASL 验证

热门文章

  1. 在Linq to Entity 中使用lambda表达式来实现Left Join和Join
  2. python绘图:turtle画太极图
  3. 铂金1:探本溯源-为何说Lock接口是Java中锁的基础
  4. 潇洒塑胶模具设计培训学校注塑模具设计培训课堂小知识
  5. python3程序设计答案_Python3程序设计参考答案
  6. 一行代码解决网页灰色
  7. 2021年A特种设备相关管理(电梯)考试题库及A特种设备相关管理(电梯)模拟试题
  8. Spark企业级开发最佳实践
  9. 国内几大物联网平台的分析http://www.cnblogs.com/ibrahim/p/baidu-iot-hub.html
  10. 蓝牙耳机知识科普:想要选购蓝牙耳机的小伙伴进来看看吧!