请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

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

正在回答

1回答

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

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

2 回复 有任何疑惑可以回复我~
  • wyz666 #1
    所以我们需要再加个定时任务,定时的刷新令牌数和票数保持同步
    为了不对数据库产生太大压力,这个定时刷新的时间一般怎么设比较好?
    回复 有任何疑惑可以回复我~ 2024-01-24 10:21:27
  • 甲蛙 回复 wyz666 #2
    我们并没有设计定时器,而是每次有请求时,判断是令牌余数是5的位数时就更新。
    用定时器也可以,时间看具体看业务,比如12306官方的余票信息估计是5分钟更新一次,我有一次买票,显示余票1,但购买时却说卖光了,我就一直刷票,直到5分钟后,余票才变为0.
    回复 有任何疑惑可以回复我~ 2024-01-29 20:24:44
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信