首页 新闻 会员 周边

数据防重问题?

0
悬赏园豆:5 [已解决问题] 解决于 2019-06-05 18:47

我的API接口里有防重判断,测试没问题,前端也加入了防重点击的功能,为什么还是挡不住!

skybirdzw的主页 skybirdzw | 初学一级 | 园豆:3
提问于:2019-04-26 15:58
< >
分享
最佳答案
1

说明测试没问题这个判断是有问题的。

收获园豆:5
爱编程的大叔 | 高人七级 |园豆:30839 | 2019-04-26 16:10

判断肯定没问题的。
会不会我加的这个锁不起作用?

skybirdzw | 园豆:3 (初学一级) | 2019-04-26 16:31

@skybirdzw: 直接给判定过程lock不就行了

花飘水流兮 | 园豆:13560 (专家六级) | 2019-04-26 17:00

@花飘水流兮: 虽然我以前很随意用过lock,但现在觉得有点问题:每一个请求IIS都会分配一个线程去处理,而WEB站点本身就是一个线程,那岂不是站点被复制了N多份? HTTP请求和站点是一对一的关系?
要是这样的话,lock也不起作用啊!

skybirdzw | 园豆:3 (初学一级) | 2019-04-26 18:43

@skybirdzw: work 线程 池。站点是进程。可以写个通讯(多客户端的,比如rs232是单客户端)试试就清楚了。连接线程 协议解析,然后扔到work池,弹出再到写进连接。
也有多进程的。各家细节不一样,大致过程一样。

花飘水流兮 | 园豆:13560 (专家六级) | 2019-04-26 21:40
其他回答(4)
1

首先你要知道MethodImpl 是如何保持同步的。
MethodImpl 是对每个实例进行同步的,

通信的搞程序 | 园豆:1747 (小虾三级) | 2019-04-28 13:56
1

首先了解MethodImpl的具体原理和规则;
还有建议将锁范围只用在判断是否存在逻辑到插入成功范围,否则过多的包括不相干的逻辑会大大影响性能!

慧☆星 | 园豆:5640 (大侠五级) | 2019-04-28 15:59
1

在防重判断那里加个锁,类似懒汉单例的实现:
if(info != null)
{
lock(obj)
{
if(info!=null)
{
xxxxxx
}
}
}
类似这样的。

又见阿郎 | 园豆:163 (初学一级) | 2019-05-04 17:10
1

查文档,如果是实例,就是当前实例上同步。
对于你这种高并发的,你这样代码里面的防重处理没有效果。

你改成lock(一个静态对象实例) 就可以了。
类为你想要的效果就是所有的请求都在这个方法上同步嘛。

gw2010 | 园豆:1487 (小虾三级) | 2019-05-05 17:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册