我们都知道,网站对于一些常用数据做缓存,会加速网站访问,像下面这样:

public string GetFoo()
{
if ( cache.get("Foo") == null )
{
cache.set("Foo", GetFooFromDb());
}
return cache.get("Foo");
}

上面的方法如果GetFooFromDb()的开销很小或者运行时间很短,则影响不大,无非就是高并发的时候多执行几次GetFooFromDb()和设置缓存的值,但是如果GetFooFromDb()开销很大或者运行时间很长,或者是很多数据缓存的集合,则需要保证GetFooFromDb()方法只被执行一次:

private static object GetFooLock = new object();

public string GetFoo()
{
if ( cache.get("Foo") == null )
{
lock(GetFooLock)
{
if ( cache.get("Foo") == null )
{
cache.set("Foo", GetFooFromDb());
}
}
}
return cache.get("Foo");
}

最新文章

  1. VS2010--2013使用技巧及使用过程中遇到的问题
  2. PTPX中的report 选项
  3. canvas-star6.html
  4. 移动端的日期插件 mobiscroll 2.14.4 破解版
  5. ios开发所有的iCON 的大小
  6. redisbook笔记——redis内部数据结构
  7. AE-模板替换->愉快今日--视频样片!
  8. 计算机安装了IE8一半退出重启时,桌面只显示背景
  9. MFC HTTP
  10. Redhat6.4下配置本地yum
  11. codeforces div2.C
  12. 从实践的角度理解cookie的几个属性
  13. JavaWeb初级进阶高级学习方向计划
  14. Codeforces Round #481 (Div. 3)
  15. A1081. Rational Sum
  16. kubernetes ui 搭建
  17. css基础--常用css属性01
  18. springBatch学习 batch的使用方式(5)
  19. 在Windows Server 2008 R2(x64)上安装.NET Framework 4.5 兼谈.NET Framework 4.0 “在服务器核心角色上不受支持”含义
  20. Sqlserver生成带数据的脚本

热门文章

  1. MYSQL存储过程,函数,光标
  2. Python的ORM介绍
  3. 配置基于Vim的Python开发环境
  4. paper:synthesizable finite state machine design techniques using the new systemverilog 3.0 enhancements 之 standard verilog FSM conding styles(二段式)
  5. 用Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围
  6. STM32CUBEMX入门学习笔记2:关于STM32芯片使用内部flash
  7. 蓝桥--2n皇后问题(递归)--搬运+整理+注释
  8. selenium2自动处理验证码
  9. Android兼容性测试CTS --环境搭建、测试执行、结果分析
  10. python_字符串,元组,格式化输出