java防穿墙技术_关于 token 穿透的问题 感觉 PHP 只能靠锁 Java 的话可以用 synchronized 来保证...

最近项目上线 有点小流量 峰值差不多 600-800qps 吧

遇到了一个微信 accesstoken 穿透问题

问题描述

在并发高的时候 这时候缓存里面的 token 失效了 那么这时候我们会去请求微信的接口来刷这个 token 这时候因为有网络 io 然后各个请求得到的 accesstoken 互相覆盖 导致获取到的 token 不一定是最新有效的 token 所以就会陷入要不断去刷这个微信 token 的死循环当中 要是没及时发现 差不多要把微信 token 的当日获取次数用完

目前我的做法 业务代码带上个参数可以直接请求微信接口去刷新这个 token

然后还有务去刷新这个 token

目前暂时解决思路

用 redis 的 setnx 锁 只有竞争到锁的才会去请求 accesstoken 然后在存到缓存里之后 再把锁释放掉 当然我会设置这个锁的最长过期时间的

这样做了之后可以防止 token 穿透 但是比如 10 个并发请求 只有一个竞争到锁 其它的请求是不是要等待一会儿再去竞争锁 这样难道不会导致前端用户体验不好吗

还有搜了下 搜到了二级缓存

可以缓存两个 key 防止穿透 但是具体实现的话 是不是还是要用到 setnx

我搜了下 java 直接一个 synchronized 就能保证了- - 我是不是可以用 java 实现一个 token 中控

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值