目前在数据层做缓存,大多是用memcached 或者redis 做数据缓存。
但是 最近发现,如果直接用文件做缓存,第一次读取比mem慢,但是第二次比mem 快好多。
百度了一下,原因是:
Cache Memory(缓存内存):
当读写文件的时候,Linux内核为了提高读写性能与速度,会将文件在内存中进行缓存,这部分内存就是Cache Memory(缓存内存)。即使你的程序运行结束后,Cache Memory也不会自动释放。这就会导致你在Linux系统中程序频繁读写文件后,你会发现可用物理内存会很少。
然后看磁盘io,确实是第一次之后,获取数据基本上都是命中了内存的。而且数据量越大,mem越慢,文件读取速度几乎不受影响。
那么,在数据条数不多,(常用的在100条左右,文件大小在100k左右),是用mem呢,还是直接用文件缓存呢?
ps: 在本机上测试,获取一条数据 1w次,文件的速度比 mem 快 5倍多。
在Linux服务器中,使用文件还是使用Memcached Redis等缓存服务取决于具体的应用场景和需求。
文件缓存的优势:
容易配置:通过设置配置文件,我们可以直接在服务器端配置缓存策略,无需额外安装软件。
简单易用:文件缓存对于简单的数据管理场景,如文件查找、文件下载等,非常方便。
可靠性高:文件缓存数据不会被操作系统直接删除,所以对于频繁读取数据的应用,文件缓存是非常好的选择。
可移植性好:文件缓存的安装和配置相对简单,适用于多种操作系统。
但是,文件缓存也有其局限性:
缓存数据的持久性:文件缓存的缓存数据不会持久保存,如果文件删除,缓存数据也会被删除。
缓存数据的更新:文件缓存的更新速度较慢,如果需要频繁更新数据,可能会导致缓存数据过时。
缓存数据的误删除:在某些情况下,由于错误的操作或者错误的配置,可能会导致缓存数据被误删除。
因此,如果数据的访问频率不高,且对数据的更新速度要求不高,文件缓存是一个不错的选择。如果需要频繁的数据更新和删除,或者需要支持多层缓存的并发访问,那么Memcached Redis等缓存服务可能是更好的选择。