Squid重启后老数据无法进入内存缓存
在实际使用中遇到一个问题。将一个运行中的Squid用 squid -k shutdown 关掉
再用 squid -s 重启
这时再看Squid的access log,发现原来缓存在里面的文件全都只是TCP_HIT,无论如何频繁访问都无法加载到内存中变成TCP_MEM_HIT 。
而如果是原来没有缓存的文件,新访问,第一次MISS后,第二次是会TCP_MEM_HIT内存命中的。
置换策略使用的是默认的LRU,不太清楚具体文件在内存和磁盘间交换的内部机制是什么?
承诺de约定
10 years, 9 months ago
Answers
好吧,自己好像找到答案了。
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层了。
苦闷的做爱
answered 10 years, 9 months ago