在实际使用中遇到一个问题。将一个运行中的Squid用 squid -k shutdown 关掉 再用 squid -s 重启
这时再看Squid的access log,发现原来缓存在里面的文件全都只是TCP_HIT,无论如何频繁访问都无法加载到内存中变成TCP_MEM_HIT 。 而如果是原来没有缓存的文件,新访问,第一次MISS后,第二次是会TCP_MEM_HIT内存命中的。
置换策略使用的是默认的LRU,不太清楚具体文件在内存和磁盘间交换的内部机制是什么?
好吧,自己好像找到答案了。
This is due to how the cache_mem cache works.. it only stores objects retrieved from the network. For objects stored in the disk cache Squid relies upon the OS filesystem caching for performance.
见此:http://www.squid-cache.org/mail-archi...
所以Squid只会把从后端取到的数据加入到内存,如果重启后,数据是从磁盘加载进来的,就不会再放到磁盘。但是这些数据并不会永远在磁盘上。当你设定的缓存时间到期后,这个数据会重新从后端取。这时候就有机会加入到内存中了。所以即使你的数据是静态的,最好也在http返回里加一个过期的头。否则重启后内存缓存就没有了。并且再也没有机会加载到内存缓存中。只能利用文件系统的cache层了。
欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。 温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。