java web解决用户重复提交

先理一下用户重复提交出现的问题
  • 假设有一个用户想要上传一件商品但是因为网速慢用户疯狂点击上传按钮导致发出多个请求到达了服务端,然后服务端把这些请求都送达到了关系数据库,最后可能重复上传商品,也可能造成关系数据库压力过大。
解决办法
1、单机环境

使用一个本地的缓存池类似KV结构的数据结构(这个推荐google开源的guava),当一个用户在一个接口发送请求时候,生成一个关于这个用户和这个接口的key,存入本地缓存,当这个接口请求完了删除这个key,如果这个key存在就把用户的请求直接return。

2、集群环境

使用redis来记录用户请求,这里推荐直接使用开源的redisson分布式锁来解决,每当有一个用户请求一个接口,就锁住,但是只是这个用户请求的时候才会被锁,其他用户就重新生成锁,然后方法执行完了再释放。

建议

笔者建议给锁和缓存都设置自动删除时间,以防在用户访问这个接口的时候出现宕机然后key依然存在在redis,当用户再次访问这个接口的时候方法还是把这个用户锁住。

笔者自己的实现

https://github.com/guoyitao/ReSubmit

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值