PHP文件缓存与memcached缓存的优缺点

2014-03-31 10:07:47  雅事达网络 我有话说(184人参与)

PHP文件缓存与memcached缓存 相比 优缺点是什么呢

之前我认为是 一个占用磁盘IO 一个直接读内存

但最近深入了解了下 又有如下疑问:
我们在从memcached服务端获取数据时采取的也是网络协议传输数据 网络传输不也是 I/O么

 

如果不考虑其他任何问题,只比较速度的话,那肯定是mem快,但他们各有优缺点。

文件缓存优点:
1、由于现在的硬盘都非常大,所有如果是大数据的时候,放硬盘里就比较合适,比如做一个cms网站,网站里有10万篇文章,生成的文件大小总数可能就会很大。
2、数据的存放较为安全,由于是硬盘存放,所以在意外掉电的情况下,缓存文件不会丢失。
3、易于扩展,如果硬盘不够用,可以更换大硬盘或者添加硬盘,在容量上受的限制很小。
文件缓存缺点:
1、高并发时,硬盘的读写性能大幅度降低。
2、网站pv持续很高的情况下,硬盘寿命大大降低。

memcached优点:
1、读写性能优异,特别是高并发时和文件缓存比有明显优势。
2、memcached组建支持集群,并且是自动管理负载均衡。
memcached缺点:
1、缓存空间有限:据说一台电脑的mem缓存开到2g以上会出现不稳定,数据无故丢失的现象。
2、掉电丢失数据:由于是把数据放在内存里的,所有一旦机器掉电,数据也就全部丢失了。

一般建议:如果是做内容缓存的话,比如把一些不经常更改的文章放在文件缓存里比较合适,而mem则适合放一些频繁更改的数据,比如可以把session数据放进mem。

评论:

1)实际项目使用经验 “据说一台电脑的mem缓存开到2g以上会出现不稳定,数据无故丢失的现象” 这种现象基本上可以不考虑。

2)大量小文件的存取,会对硬盘io效率影响,另外硬盘可能会坏掉。尽量采用Key-Value做缓存, memcache是个不错的选择

在实际项目应用中,可以联合使用memcache和文件类型缓存。根据热度来把最热的数据放在内存里面。然后把一般的数据放在文件缓存中。

读取数据时,可以按照 memcache=>file_cache=>databases
这样的递归来处理。最大程度的利用缓存来减轻数据库的查询压力。

另外session不能放在内存里面。可以用redis存储session.定时把内存数据刷新到硬盘。这样万一断电或者其他故障,不至于所有session都失效。

 

memcache 的使用场景是:当你有大量的数据 >2G 大小,而这些数据是 有可能被很频繁的读写时,memcache可以使用集群,不但跨进程,而且跨机器。

文件缓存,现在较少使用了。因为磁盘io的随机定位是10ms 左右,而且磁盘io太频繁的话,会拖慢整个服务器的处理性能。也没办法支持高并发。

现在的大部分的时候都是将计算和io区分开,可以保证各自的性能。计算可以放到数据库去做,比如查询 ,连表啊 啥的。
io就nosql吧 这样支持高并发好点。

 

 

 

 

分享到:

已有37条评论,共184人参与

还没有评论
最新评论刷新
建海666
这里是博客评论区,请登录
32分钟前
果果明赫
这里是博客评论区,请登录
60分钟前