关于缓存令牌减少丢失操作

来源:18-6 使用缓存加速令牌锁功能

qq_Theonlywinne_0

2023-07-25

  1. 代码里写的是每次购票要去减少redis中的令牌的时候,都会把过期时间更新为60秒,但是每减少5个token才进行一次MySQL数据库一致性的刷新。那很有可能此次减少的令牌不足五个,但是60s内有没有再次访问这个锁,那这次令牌的减少就没有更新到mysql中。这个问题是因为token没有那么高的一致性要求吗,所以可以不用管。
  2. 令牌大闸和令牌桶还有什么背的区别吗,我看老师讲的,主要区别就是
    • 令牌桶有一个定速放令牌的过程
    • 令牌大闸是一次性把令牌给够
      那为什么这个项目要选择令牌大闸呢,只有这一个区别好像并不能成为一个选择这个技术的决定性原因。
写回答

1回答

甲蛙

2023-07-26

  1. 是的,令牌数和票数关联不需要那么紧密,不需要管,实际中,有可能令牌没了,票还没卖完,所以我们需要再加个定时任务,定时的刷新令牌数和票数保持同步。

  2. 可以这样来理解,令牌桶是为了解决水流速度的,我可以控制出票的速度,太快了会导致我服务承受不了;令牌大闸是为了解决库存上限的问题,如果没有令牌大闸,那么我票卖完了,水流还一直在,一直会校验我的库存,对服务也是一种压力。一般两者要配合起来使用,又要控制卖的速度,又要控制卖的上限

2
2
甲蛙
回复
wyz666
我们并没有设计定时器,而是每次有请求时,判断是令牌余数是5的位数时就更新。 用定时器也可以,时间看具体看业务,比如12306官方的余票信息估计是5分钟更新一次,我有一次买票,显示余票1,但购买时却说卖光了,我就一直刷票,直到5分钟后,余票才变为0.
2024-01-29
共2条回复

新版Springboot3.0打造能落地的高并发仿12306售票系统

最新版Spring3.0仿12306售票系统实战

852 学习 · 511 问题

查看课程