首页 新闻 会员 周边

如何解决cache失效用户并发请求问题

0
[已解决问题] 解决于 2012-09-03 10:21

比如:

if(cache["key"]==null)

{

  lock(this)

  {

    if(cache["key"]==null)

    {

      cache.Insert("key",func())

    }

  }

}

这边的func 是有返回结果的一个委托

代码大概是这么一个逻辑,但是如果其中有一个key的委托如果执行很久的话,那不是其他地方的缓存都要等这个委托执行完,那不是我不需要访问这个缓存的也要等这个委托执行完把lock解开,不知道有没有办法可以就是各个不同名称的缓存的lock互不受影响

sixserve的主页 sixserve | 初学一级 | 园豆:21
提问于:2012-08-11 11:02
< >
分享
最佳答案
0

不建议用lock,即时同时插入缓存,也不会有问题,缓存服务器一般会处理这程情况。使用lock反而会带来性能问题。

奖励园豆:5
dudu | 高人七级 |园豆:30994 | 2012-08-11 13:58
其他回答(1)
0

那你就需要lock不同的锁,不如我有2个角色,需要修改信息,这2个觉得都有guid这个唯一标示,

这个时候,我可以lock(string.Intern(guid.tostring()))

{

  do somethings。这样的话就单独的lock各自的对象。

}

可以先了解一下啊string.intern这个方法。

chenping2008 | 园豆:9836 (大侠五级) | 2012-08-12 17:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册