首页| JavaScript| HTML/CSS| Matlab| PHP| Python| Java| C/C++/VC++| C#| ASP| 其他|
购买积分 购买会员 激活码充值

您现在的位置是:虫虫源码 > 其他 > 用于网络服务器的内存哈希缓存

用于网络服务器的内存哈希缓存

资 源 简 介

mh_cache是我新写的一个项目,主要功能是作为一种插件的形式放在web server的前端,就像计算机体系结构中cache和内存的关系一样,通过先在mh_cache缓存一部分数据来分流web server的压力。举个例子:比如web server是一个学生管理系统,提供了选课、在线考试、成绩查询等服务。当学期结束,也就是考试结束,可能学生最关心的事情就是成绩怎么样啊,可能在这一刻会有很多学生并发访问服务器去得到自己的成绩,那有了mh_cache就可以把学生成绩放在我这个mh_cache中,并且使用学生ID这个键值来做HASH,这样学生访问web server时会先访问到mh_cache,然后利用自己的键值,hash后可以很快得到自己成绩的索引,根据索引定位到hashtable的槽位,可以在线性级时间内找到自己的成绩,这样既提高了查询速度,有缓解了web server的压力! 设计原理: 存储数据部分使用了HASH TABLE来实现,主要为了提高效率,选择了链接法来解决冲突。 每个数据都有一个lifetime,以便在过期后清理。 在mh_cache缓存满了的时候,就要删除节点来获得内存,此时根据OS的页面调度算法FIFO、LRU、RR等,目前采用的是FIFO,使用另外一个数据结构队列来提供在缓存满了时候,清理内存的依据,队列的节点只存储key值,在删除时,从队头pop出后,拿着key到HASH TABLE上找HASH NODE,找到删除,直到内存够用为止! 更新自2009-5-18,目前增加了LRU算法来清除节点,跟FIFO相比,可能对cache的命中率会提高,但是每次删除前都要去看一下hashnode,效率不够好! 并发服务器: 并发方式选择的是多线程,没有使用我在多进程并发服务器中常用的“watcher--worker”模式,而是通过线程属性设置线程在创建伊始就和当前进程detach掉,成为独立的线程,这样就交给了系统来处理,避免了主线程wait子线程式join的麻烦,以及可能引起的内存泄漏! I/O方式使用的是非阻塞I/O方式,你应该能明白为什么没用

文 件 列 表

doc
README
protocol_cn.txt
设计原理.doc
server.c.bak
cache.c
cache.h
mini_hash.c
mini_hash.h
mini_hash_global.h
server.c
server.h
tmcommon.c
tmcommon.h
tmqueue.c
tmqueue.h
VIP VIP
0.172069s