我的脚本通过慢速连接获取很多JPEG文件。我将下载的文件存储在本地缓存中,并重新使用它们直到它们被更改。PHP中磁盘缓存清除/大小限制的模式?
现在的问题是:我该如何确保这个缓存不会超过16Mb(比如说)?
我可以清理时,我想:
- 计算总缓存中的所有文件的大小。
- 删除一些文件,直到16Mb以下减去需要的数量。
但是如果脚本的两个实例执行此操作会怎么样?两者都确保1Mb是免费的,然后每个使用1Mb,现在缓存为17Mb。 16Mb的规则被打破。
我知道我可以让“懒惰缓存”:只是不时清理它。但恶意用户可能会触发大量缓存并耗尽磁盘空间。这是一个共享主机,所以不能做。
我想出了(坏的)唯一的解决办法:
存储任何东西之前,锁定整个缓存,清理所需的空间,存储文件,解开缓存。为什么不好:我正在缓存很多文件,所以很多锁定和大量清理。慢。 (你怎么锁定/等待锁定在PHP?)
在从远程位置获取文件之前,您是否知道文件大小?如果没有,您可以在获取文件后清理缓存目录。 –
我确实有帮助吗?两个实例每个都获取1Mb,这两个实例都确保有1亿空闲空间,都写入1Mb => 2Mb。 – himself
@himself你能解释缓存是PHP生成的HTML,源代码,序列化数据,JSON还是只是普通的静态图像? – ajreal