使用文件缓存减少对数据库的操作

最近我们的主数据库当前连接数超过 400, 客户端连接经常超时 ,Cpu 波动较大,四台MemCached (每台32G) 已经不够用,命中率也较低。该数据库服务器是每天4亿PV的核心。我们优化数据库后。开发了文件缓存系统。

某个页面第一次接受用户访问时将数据库中获取到的内容转化成字符串文件的形式,并且存储在服务器硬盘当中,当后面的人再来访问时先读取本地 Cache, 如果获取不到只需要直接读取物理文件的内容即可,从而达到减少数据库操作的目的 .

 

先看一下流程图 :

 

 

 

使用文件缓存肯定一个读 / 写冲突,并发的问题 , 特别像我们这么大访问的频道

 

1.       解决读写冲突方法  
Get
获取物理时
1
à 判断文件锁 .Lock 是否存在 à 如果存在表示该文件正在被写中 . 不获取 . 否则就获取
2
à 读取时中间已加上 HttpCache. 防止不停地在读 . 造成 I/O 过高 .

 

Set 写入物理文件

1 à 使用读取锁 ReaderWriterLock _locker = new ReaderWriterLock (); // 读取锁
2
à _locker.AcquireWriterLock(TimeSpan .FromSeconds(3));
        //
写锁定(写入时间最大允许在3 秒内完成,超时立即退出)
3
à 创建一个.lock 的物理文件, 表示该文件正在被创建
4
à 创建缓存物理文件
5
à 删除.lock 物理文件
6
à _locker.ReleaseWriterLock(); // 释放写锁定

 

源代码:
FileCache.cs


   

 

HttpCache.cs

 

 

demo.aspx

 
另外需要Newtonsoft.Json.Net20.dll 类库。这时上传不了。如果需要,请发邮件联系我:duanxiaoyong@3g.net.cn
或Msn:web718@hotmail.com

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值