Redis优化秒杀系统
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优化秒杀系统相关推荐
- 基于Redis实现秒杀系统
系统架构 客户端发起秒杀请求,请求经网关处理转发到对应的服务节点上,进行业务层处理,最后数据入库. 业务处理: 验证秒杀活动是否已经开启: 对流量进行限制: 验证订单信息(验证重复秒杀.验证库存是否足 ...
- 如何利用redis实现秒杀系统
文章目录 题记 利用Watch实现Redis乐观锁 题记 在线思维导图总结:redis大纲 利用Watch实现Redis乐观锁 乐观锁基于CAS(Compare And Swap)思想(比较并替换), ...
- java设计前期工作基础和存在的困难_Java秒杀系统实战系列-基于Redisson的分布式锁优化秒杀逻辑...
本文是"Java秒杀系统实战系列文章"的第十五篇,本文我们将借助综合中间件Redisson优化"秒杀系统中秒杀的核心业务逻辑",解决Redis的原子操作在优化秒 ...
- Java秒杀系统实战系列~基于Redisson的分布式锁优化秒杀逻辑
摘要: 本篇博文是"Java秒杀系统实战系列文章"的第十五篇,本文我们将借助综合中间件Redisson优化"秒杀系统中秒杀的核心业务逻辑",解决Redis的原子 ...
- 【高并发】Redis如何助力高并发秒杀系统?看完这篇我彻底懂了!!
秒杀业务 在电商领域,存在着典型的秒杀业务场景,那何谓秒杀场景呢.简单的来说就是一件商品的购买人数远远大于这件商品的库存,而且这件商品在很短的时间内就会被抢购一空.比如每年的618.双11大促,小米新 ...
- 实践出真知:全网最强秒杀系统架构解密!!
很多小伙伴反馈说,高并发专题学了那么久,但是,在真正做项目时,仍然不知道如何下手处理高并发业务场景!甚至很多小伙伴仍然停留在只是简单的提供接口(CRUD)阶段,不知道学习的并发知识如何运用到实际项目中 ...
- 实践出真知:全网最强秒杀系统架构解密
很多小伙伴反馈说,高并发专题学了那么久,但是,在真正做项目时,仍然不知道如何下手处理高并发业务场景!甚至很多小伙伴仍然停留在只是简单的提供接口(CRUD)阶段,不知道学习的并发知识如何运用到实际项目中 ...
- 解密秒杀系统架构,不是所有的系统都能做秒杀!
摘要:教你如何设计一个秒杀系统架构:从电商系统架构到秒杀系统.从高并发"黑科技"与致胜奇招到服务器硬件优化,全方位立体掌握秒杀系统架构!! 本文分享自华为云社区<实践出真知: ...
- 万字详解秒杀系统!!
大家好,我是捡田螺的小男孩~ 今天推荐冰河老哥一篇干货 很多小伙伴反馈说,高并发专题学了那么久,但是,在真正做项目时,仍然不知道如何下手处理高并发业务场景!甚至很多小伙伴仍然停留在只是简单的提供接口( ...
最新文章
- Linux下 WiFi rtl 移植,IMX6Q Linux WIFI+BT(RTL8723au)模块移植问题
- RTEMS文件系统(4):系统调用开发信息(上)
- Spring:源码解读Spring IOC原理
- hdu5105给你一个方程,让你求极值(直接暴力)
- 开启 J2EE(七)— Model1、Model2和三层架构的演变
- java虚拟机如何判断两个类相同_你有没有想过: Java 虚拟机是如何判断两个对象是否相同的?判断的流程是什么?...
- Spark学习笔记:数据读取和保存
- [导入]设计模式初学者系列-工厂方法
- python 浏览器自动化 弹窗控制_Selenium2+Python自动化-处理浏览器弹窗(转载)
- HuggingFace学习2:使用Bert模型训练文本分类任务
- 荣耀老熊科普荣耀9X升降全面屏 一升一降皆是技术的沉淀
- Java 系统工具类 —— System、Scanner、Runtime
- perl中的文件句柄
- sql常用函数详解(一)——字符串截取
- python 从入门到实践_Python编程从入门到实践日记Day36
- 后盾网php多少钱_后盾网php视频教程:2020最热的8个后盾网免费php视频教程
- rtl8201以太网卡调试
- 水平线标记的用法和属性
- 设置笔记本电脑插入USB鼠标时,自动禁用触摸板
- KafKa 开启 SASL 验证
热门文章
- 在Linq to Entity 中使用lambda表达式来实现Left Join和Join
- python绘图:turtle画太极图
- 铂金1:探本溯源-为何说Lock接口是Java中锁的基础
- 潇洒塑胶模具设计培训学校注塑模具设计培训课堂小知识
- python3程序设计答案_Python3程序设计参考答案
- 一行代码解决网页灰色
- 2021年A特种设备相关管理(电梯)考试题库及A特种设备相关管理(电梯)模拟试题
- Spark企业级开发最佳实践
- 国内几大物联网平台的分析http://www.cnblogs.com/ibrahim/p/baidu-iot-hub.html
- 蓝牙耳机知识科普:想要选购蓝牙耳机的小伙伴进来看看吧!