我觉得我还不清楚,从文件或memcached中读取内容会更快吗?为什么呢?
答案 0 :(得分:29)
Memcached更快,但内存有限。硬盘很大,但I / O比内存慢。你应该把最热门的东西放到memcached ,所有其他可以来缓存文件。
(或者把人投入并投入更多的钱,比如these guys:)
对于某些基准测试,请参阅:Cache Performance Comparison (File, Memcached, Query Cache, APC)
理论上:
Read 1 MB sequentially from memory 250,000 ns
Disk seek 10,000,000 ns
http://www.cs.cornell.edu/projects/ladis2009/talks/dean-keynote-ladis2009.pdf
答案 1 :(得分:14)
有很多不同的方面可能有利于其中一个:
我建议你看看你的用例并对这两种方法进行一些分析。如果您可以使用文件系统,那么我会。添加memcached会增加另一层复杂性和潜在的故障点(memcached客户端/服务器)。
值得一提的是,关于磁盘与内存性能的其他评论很可能是学术性的,就好像文件系统数据被定期访问一样,然后无论如何它都可能位于操作系统或磁盘缓存中。
答案 2 :(得分:5)
"更快"没有上下文就不能使用。 例如,访问远程服务器上的memcached中的数据可能会更慢"由于网络延迟。另一方面,通过10Gb网络从远程服务器存储器读取数据可以更快"而不是从本地磁盘读取相同的数据。
文件系统缓存和使用memcached的主要区别在于memcached是一个完整的缓存解决方案。因此有LRU列表,到期概念(数据新鲜度),一些高级操作,如cas / inc / dec / append / prepend / replace。
Memcached易于部署和监控(我们如何区分"缓存"文件系统上的工作负载,让我们说内核?我们可以计算缓存数据的总量吗?数据分发?容量规划?等等。)
还有一些混合系统,例如cachelot 基本上,它的memcached可以直接嵌入到应用程序中,因此可以在没有任何系统调用或网络IO的情况下访问缓存。
答案 3 :(得分:1)
你对这些细节感到非常沮丧。而且我相信你寻找的答案取决于情绪。据我所知,很少有东西比其他东西更好。
显然,阅读文件系统的东西并不会更快(假设它是一个硬盘)。即使是SDD也会明显慢于内存中的读取速度。原因是HDD / FileSystem是为了容量而不是速度而构建的,而DDR内存因此特别快。
良好的缓存意味着将频繁访问的部分保留在内存中,并将不常访问的内容保存在磁盘上(持久存储)。这样,通过缓存实现可以大大改善正常情况。那是你的目标。确保您对理想的缓存策略有充分的了解。这将需要广泛的基准测试和测试。
答案 4 :(得分:1)
事实上,从内存中读取比从HDD读取要快得多并不简单。正如您所知,Memcached基于tcp连接,如果您每次想要获取连接或将其设置为memcached服务器(大多数程序员都这样做)时,它就会比使用文件缓存执行得差。您应该使用静态Memcached对象,并重用该对象。其次,现代操作系统将缓存经常使用的文件,这使得文件缓存可能比实际TCP连接的内存缓存更快。
答案 5 :(得分:0)
这取决于缓存是否存储在本地。 Memcache可以通过网络存储数据,这不一定比本地磁盘快。
答案 6 :(得分:0)
缓存类型|缓存每秒获取次数
阵列缓存| 365000
APC缓存| 98000
文件缓存| 27000
Memcached缓存(TCP / IP)| 12200
MySQL查询缓存(TCP / IP)| 9900
MySQL查询缓存(Unix套接字) 13500
从表中选择(TCP / IP)| 5100
从表中选择(Unix套接字) 7400
资料来源:
https://surniaulula.com/os/unix/memcached-vs-disk-cache/
我的来源:)
https://www.percona.com/blog/2006/08/09/cache-performance-comparison/
答案 7 :(得分:0)
如果该文件存储在磁盘中,并且经常被访问,那么很有可能在 RAM 中找到它(作为最近访问的文件),或者我在这里遗漏了什么? 是的,第一次读取将来自非常缓慢的磁盘,但是随后的读取呢(假设该文件很热并且读取了大量内容)这应该比 memcached 更快,因为这是纯 RAM 读取