为了教育目的,我想写一个档案经理。我计划把软件分成后端和前端。后端将执行这样的文件系统缓存:
/foo/bar。/foo/bar 的前端接收文件列表查询。/foo/bar从磁盘上使用readdir()读取文件项
/foo/bar中的文件列表当用户下一次想从/foo/bar中列出文件时,后端将从数据缓存服务器返回条目,而不是通过内核调用执行磁盘I/O操作,前提是/foo/bar中的文件自上次查询以来没有变化--我可以使用inotify之类的方法来监视该查询。
现在,我的问题如下:
发布于 2017-04-17 04:45:49
Linux确实在某种程度上负责缓存,它主要与在内存中加载文件有关(这些文件不是写到内存中的)。另外,依赖于LINUX来缓存您的目录,这意味着您失去了对要缓存的内容的控制。此外,LINUX缓存取决于许多因素,因为它的目标主要是确保数据一致性,而不是读取性能。
因此,从磁盘卸载一些工作是有意义的。
这就提出了更多的问题。是位于单独机器或本地机器上的磁盘,也是位于Redis服务器的位置。它是集群环境还是简单的服务器?
如果Redis和磁盘位于同一台&单机上,那么无论终端位置如何,您都必须承担网络成本。当您在机器内时,RAM总是胜过磁盘I/O,无论是读还是写。
有关更多信息,请参见此answer
每个人都应该知道的数字 L1缓存引用0.5ns分支错误预测5 ns L2缓存引用7 ns Mutex锁/解锁100 ns (25)主存参考100 ns压缩1K字节与Zippy10 000 ns (3,000)通过1 Gbps网络发送2K字节20,000 ns顺序从同一数据中心500,000 ns内的内存250,000 ns循环中读取1 MB磁盘查找10,000,000 ns顺序从网络读取1 MB 10,000,000 ns (20,000,000)发送数据包CA->荷兰->CA 150,000,000 ns
https://stackoverflow.com/questions/43437843
复制相似问题