使用文件缓存减少对数据库的操作
来源:互联网 发布:java定义一个方法 编辑:程序博客网 时间:2024/05/04 21:17
最近我们的主数据库当前连接数超过400,客户端连接经常超时,Cpu波动较大,四台MemCached (每台32G) 已经不够用,命中率也较低。该数据库服务器是每天4亿PV的核心。我们优化数据库后。开发了文件缓存系统。
某个页面第一次接受用户访问时将数据库中获取到的内容转化成字符串文件的形式,并且存储在服务器硬盘当中,当后面的人再来访问时先读取本地Cache,如果获取不到只需要直接读取物理文件的内容即可,从而达到减少数据库操作的目的.
先看一下流程图:
使用文件缓存肯定一个读/写冲突,并发的问题,特别像我们这么大访问的频道
1. 解决读写冲突方法
Get获取物理时
1à判断文件锁.Lock是否存在à如果存在表示该文件正在被写中.不获取.否则就获取
2à读取时中间已加上HttpCache.防止不停地在读.造成I/O过高.
Set 写入物理文件
1à使用读取锁ReaderWriterLock _locker = newReaderWriterLock(); //读取锁
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
- 使用文件缓存减少对数据库的操作
- 使用oscahe缓存技术减少与数据库的频繁交互
- c#缓存机制,用于大批量连接数据库的性能优化,可减少对数据库的消耗。
- 合理使用缓存减少对服务器的访问之Cache-Control
- mysql数据库对文件操作的封装
- 减少mssql2008数据库的ldf文件
- 数据库性能优化-4-减少对数据库的连接次数
- 减少编译器对各项操作重新排列的自由
- 数据库操作(初期)&&清除缓存的简单使用
- 对数据库的操作
- 网游服务器减少数据库操作
- js缓存变量,减少DOM操作开销
- 快速掌握 Mysql数据库对文件操作的封装
- groovy中对文件,集合,测试,数据库的操作例子
- 缓存框架Ehcache,减少数据库频繁查询
- 对文件的操作
- 对文件的操作
- 对文件的操作
- 怀念那天
- Working in the Background
- Linux下使用命令行编辑 OpenCV程序
- 并发集合类 ConcurrentHashMap 和 CopyOnWriteArrayList
- Duration, Scope, Linkage in C
- 使用文件缓存减少对数据库的操作
- XML的文档类型定义(DTD)复习笔记
- LoadRunner工具结构和原理
- 超链接链接到其他页面的指定位置
- 一年一度高考时
- 在JADE平台下开发多Agent系统
- 【转】帧缓冲设备所支持的操作及原理
- SQL server 連接 oracle 服務器
- js 弹出子页面与关闭子页面刷新父页面的问题