赞
踩
前后端分离部署(因为重点是学习Redis的企业开发,为避免麻烦,未使用微服务开发)
解释上图:
前端部署在nginx服务器上,
基于Session实现登录
集群的session共享问题
基于Redis实现共享session登录
引出:
上节课的秒杀是自己在页面点击实现的,而真实秒杀场景下用户每秒下单量可能达到数万,在如此强大的高并发下,会出现什么问题呢?会不会超卖呢?
使用jmeter实现高并发场景:
问题分析:
理想情境下:
高并发实际情况:
原因:多个线程操作共享的资源,并且操作资源的代码有好几行,在这之间多个线程相互穿插,就出现了安全问题。(Java多线程安全问题)
超卖问题是典型的多线程安全问题,针对这一问题的常见解决方案就是加锁
锁有两种——悲观锁、乐观锁。
两种锁对比如下:
乐观锁的两种实现方案:
版本号法、CAS法
利用以上的锁,可以实现避免超卖问题
解决了超卖问题,还有一个问题待解决——
黄牛下单,一个人买完所有券,所以要实现一人一单功能。
由上面的分析,仅在下单前做一个user_id与voucher_id是否存在的判断即可
代码修改:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。