JeffreySu / WeiXinMPSDK

微信全平台 .NET SDK, Senparc.Weixin for C#,支持 .NET Framework 及 .NET Core、.NET 8.0。已支持微信公众号、小程序、小游戏、微信支付、企业微信/企业号、开放平台、JSSDK、微信周边等全平台。 WeChat SDK for C#.
https://weixin.senparc.com
Apache License 2.0
8.43k stars 4.35k forks source link

memcached同步锁的问题 #517

Closed spadark closed 7 years ago

spadark commented 7 years ago
问题描述

if (_cache.Get(key) != null) { return false;//已被别人锁住,没有取得锁 } else { _cache.Store(StoreMode.Set, key, new object(), new TimeSpan(0, 0, 10));//创建锁 return true;//取得锁 }

经单元测试发现, StoreMode 不应该使用Set, 这样会导致高并发下, 多个线程都重复获取到锁. 应该使用Add模式, 这样memcache会判断key是否存在.

if (_cache.Store(StoreMode.Add, key, new object(), new TimeSpan(0, 0, 10))) { return true;//取得锁 } else { return false;//已被别人锁住,没有取得锁 }

发现问题的模块
模块对应的.net版本
开发环境
缓存环境
JeffreySu commented 7 years ago

方便Pull Request到Developer分支里面吗?加入到Contributor里面来。

JeffreySu commented 7 years ago

已经修改,感谢! https://github.com/JeffreySu/WeiXinMPSDK/pull/529/commits/d927b5e8730fab0608f6b2a2db2d56bedb78adc9