我想先把点击数保存到cache,等这个cache消失的时候再统一写入数据库,使用CacheItemRemovedCallback时只对显式remove的cache起作用,我用清空全部缓存及回收IIS或重启应用程序的方法使得缓存丢失后并不触发CacheItemRemovedCallback,这时候该怎么办?

解决方案 »

  1.   

    那你就在Application_End 事件中写代码
      

  2.   

    我是为了少连接数据库的啊,IIS回收不会触发Application_End 事件的吧
      

  3.   


    IIS回收 就是关闭网站了。再有人访问就重启网站。
      

  4.   

    >>我用清空全部缓存及回收IIS或重启应用程序的方法使得缓存丢失后并不触发你这叫做“异常”,当然正常的回调无法执行。极端一点说,你应该用“直接拔下服务器电源插头然后过15分钟再插上”来测试异常行为的底线——如果确实需要这种能力。如果要在此苛刻的异常情况下保存数据,那么只有一个办法,就是在将数据写入cache时“立刻”写入数据库,而不是拖延到cache.removed时。
      

  5.   

    “少连接数库”?其实大多数时候你是根本在浪费数据库。你应该把数据库的性能能力榨干,而不是少用它。你可以将写入数据库的动作(waitcallback实现)放入一个 QueueUserWorkItem(WaitCallback callBack) 中,你的目的应该是让程序变成智能并行,而不是让程序编程傻瓜顺序式,不要让CPU和数据库闲着没事做。