ASP.NET MVC 会话锁之高性能并发问题

个朋友咨询我,为什么在单独测试项目中,多个接口可以可以并行执行,而到实际项目中就线性执行,而不能并行执行(多核cpu)关于这个问题 今天就说说哪些因素影响高性能并发问题。

1、session

在ASP.NET MVC 中 session 默认访问请求加锁的,也就是说,请接口是按顺序执行,不会产生因请求多而生数据问题,不需额外加并发锁处理问题。

优点: session 自带锁,不需要加并发锁。

缺点:性能低,不能高并发请求。

如果项目中用session 可以controller 类上加上[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)] 这个 。当然 这个类中是可以读取session 不能写session,如果写session了 上面就不起作用了。如果想保存用户信息,可以参考下面方案。

2、cache

在ASP.NET MVC 中cache 不会产生像 session 访问请求加锁的,也就是说,请接口不是按顺序执行,会产生因请求多而生数据问题,需要额外加并发锁处理问题。

优点:支持并行请求,性能相对 session 高

缺点:高并发请求时 需要加并行锁,保证数据一至性问题,如果数据过多会服务器性产生一定影响。集群会产生一定影响

3、第三方nosql 

在ASP.NET MVC 中当然也可以使用第三方nosql (redis、memcached等)数据库 来保存一些缓存数据,比如数据字典,用户信息等

优点:高性能,高并发,集群不受影响,可以任意策略。

缺点:高并发请求时 需要加并行锁,需要安装服务端,客户端需要额外写访问代码。

今天就分享到这里,下次有时间 来分享一下 asp.net 高性能高并发时锁问题。

你可能感兴趣的:(ASP.NET MVC 会话锁之高性能并发问题)