Redis事务--秒杀案例思路由浅到浅

模拟用户秒杀

模拟用户秒杀

  1. 秒杀前 秒杀还未开始,在前台用span标签在秒杀按钮后面显示秒数,用定时器setInterval()传入一千毫秒(一秒)实现每秒减一,减到为0,进行校验,将秒杀按钮颜色提亮,状态变成可点击,最终实现秒杀倒计时得效果;
    2 秒杀中 当用户点击秒杀按钮,将用户得id传入后台,使用redis中得sismember(key,vaule)判断用户是否抢过,如果抢过返回失败,如果没抢过进行库存判断是否小于等于零,如果没有则返回秒杀成功;
  2. 秒杀后 秒杀后进行判断库存是否为空,为空则进行前台得效果修改;

Redis事务高并发案例

1.使用ab工具模拟高并发 在高并发得情况下,在一个时间内多个用户点击秒杀按钮,多个用户秒杀成功,可能造成超卖得现象。
2.超卖解决方法使用redis实现事务加锁得方式。
1)watch(key) 监视用户的id
2)开启事务 jedis.mult
3)transaction操作
4)transaction.exec提交
3.造成库存遗留和连接超时性能问题
1)连接超时使用线程池解决性能问题
2)库存遗留问题,主要是用乐观锁实现,查看数据没有问题,但是进行数据的写,由于版本号的问题会照成大量的用户秒杀指令失败,照成不公平,一些比较晚点反而会秒杀成功,使用lua撸啊脚本,将并发请求排成队列,因为lua脚本写好的逻辑会放在redis执行,而redis是单线程,而lua脚本是原子性,当我执行一段逻辑之前不会被其他操作打断,把并发改成了串行。
4.撸啊脚本的局限性
1)lua脚本无法支持redis的集群环境。
2)解决:可以把一个一个的并发请求排队放入list中,左边插入,右边拿出

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值