关于网站大并发情况下的数据的初始化如何处理。
2009-09-02 11:34
826 查看
简短节说:网站在运行过程中,一些缓存数据需要初始化工作,那么在大并发情况下会造成数据重复。
举例 if(arrArea == null)
{
List arrArea = new List();
arrArea.add(1);
arrArea.add(2);
Cache.Insert(arrArea);
}
假如该段代码不是放在Application_Start方法体中,而是在网站首页上。就会造成arrArea被重复插入相同的数据。
因为瞬间并发多,if(arrArea == null)逻辑判断会来不及。
那么就要进行线程间的同步。
string tongbu = "abc";
lock(tongbu)
{
if(arrArea == null)
{
List arrArea = new List();
arrArea.add(1);
arrArea.add(2);
Cache.Insert(arrArea);
}
}
也可以,
Type tempType = Typeof(_Default);
Monitor.Enter(tempType );
if(arrArea == null)
{
List arrArea = new List();
arrArea.add(1);
arrArea.add(2);
Cache.Insert(arrArea);
}
Monitor.Exit(tempType);
还有很多种方式。我想知道的是,有没有更加高明的方法,因为貌似这两种方法都不太好,我在一个每天流量20万的网站上测试发现不是太稳定。
-----------------------
不好意思,之前排版有点问题。我发此文目的是想了解大家都在使用什么高明的方法。
举例 if(arrArea == null)
{
List arrArea = new List();
arrArea.add(1);
arrArea.add(2);
Cache.Insert(arrArea);
}
假如该段代码不是放在Application_Start方法体中,而是在网站首页上。就会造成arrArea被重复插入相同的数据。
因为瞬间并发多,if(arrArea == null)逻辑判断会来不及。
那么就要进行线程间的同步。
string tongbu = "abc";
lock(tongbu)
{
if(arrArea == null)
{
List arrArea = new List();
arrArea.add(1);
arrArea.add(2);
Cache.Insert(arrArea);
}
}
也可以,
Type tempType = Typeof(_Default);
Monitor.Enter(tempType );
if(arrArea == null)
{
List arrArea = new List();
arrArea.add(1);
arrArea.add(2);
Cache.Insert(arrArea);
}
Monitor.Exit(tempType);
还有很多种方式。我想知道的是,有没有更加高明的方法,因为貌似这两种方法都不太好,我在一个每天流量20万的网站上测试发现不是太稳定。
-----------------------
不好意思,之前排版有点问题。我发此文目的是想了解大家都在使用什么高明的方法。
相关文章推荐
- 如何处理高并发情况下的DB插入
- IOS-如何处理多个网络请求的并发的情况
- 电商网站是怎么处理大数据和并发架构网站
- 关于Android如何给传递线程初始化数据
- 总结概括对于大数据、高并发的网站如何进行优化的问题
- 电商网站处理大数据和并发架构网站
- 关于mysql处理百万级以上的数据时如何提高其查询速度的方法
- 关于mysql处理百万级以上的数据时如何提高其查询速度的方法
- 如何处理高并发情况下的DB插入
- 如何打造一个高并发,处理海量数据,高性能,易扩展,可伸缩,高可用的网站?
- 如何处理几十万条并发数据
- 关于如何处理Mybatis参数为对象中包含list情况
- 处理高并发、大数据存储的网站技术架构
- 关于mysql处理百万级以上的数据时如何提高其查询速度的方法
- 关于为了保证数据安全,让已登陆用户在不操作的情况下超时退出的处理
- 多线程,高并发的情况下操作redis当中的数据,如何加锁?
- 如何处理高并发情况下的DB插入
- 如何处理几十万条并发数据
- 关于mysql处理百万级以上的数据时如何提高其查询速度的方法
- 如何处理大量数据并发操作