首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP中磁盘缓存清除/大小限制的模式?

PHP中磁盘缓存清除/大小限制的模式?
EN

Stack Overflow用户
提问于 2011-08-25 12:52:58
回答 3查看 545关注 0票数 2

我的脚本通过一个缓慢的连接获取很多JPEG文件。我将下载的文件存储在本地缓存中,并重复使用它们,直到它们被更改。

问题是:如何确保这个缓存不大于16 is (比方说)?

我想要的时候可以把它清理干净:

  1. 计算缓存中所有文件的总大小。
  2. 删除一些文件,直到它小于16 it减去我需要多少。

但是,如果脚本的两个实例会这样做呢?确保1Mb是免费的,然后每个使用1Mb,缓存现在是17 1Mb。16 is规则被打破。

我知道我可以使“惰性缓存”:只是不时地清理它。但是,恶意用户可能触发大量缓存并耗尽磁盘空间。这是一个共享的主机,所以没有人能做到。

--我想出的唯一解决方案(糟糕):

在存储任何东西之前,锁定整个缓存,清理所需的空间,存储文件,解锁缓存。为什么不好:我缓存了很多文件,所以很多锁定和清理。慢的。(还如何在PHP中锁定/等待锁?)

EN

回答 3

Stack Overflow用户

发布于 2011-08-25 13:37:42

我误会你了-这看起来太容易了。如果您没有数据库avaliable数据库=具有某种数据格式的某个文件。

在数据库中创建一个包含以下列的表:文件名、文件大小、如果文件仍在下载,则标记(true/false)。

当您收到下载文件的新请求时-锁定此表。计算和(文件大小)。

  1. 如果它小于16 to减去新的文件大小,那么向表中添加新条目。下载文件后更改标志(在下载文件之前/之后使用锁/解锁)。
  2. 如果是更多:如果您有一些下载的文件,您可以删除和删除它们,而您没有足够的空闲空间,然后添加条目到表。
  3. 如果您不能释放足够的内存-拒绝此请求/等待一些文件下载。

每次打开桌子后,每次都要锁上几毫秒,这样就不用等任何人了。

票数 1
EN

Stack Overflow用户

发布于 2011-08-25 13:54:50

我不会按照你的规定去做,但你可以使用以下方法:

目录 -

LOCK_EX -在进行写入过程中获取文件的独占锁。

在某个地方创建一个.txt文件,让脚本尝试获取内容。如果已经有一个脚本正在运行,它将对文件进行锁定,因此新脚本将无法访问该文件。如果无法访问该文件,请不要执行缓存代码。

票数 0
EN

Stack Overflow用户

发布于 2011-08-25 14:04:54

你需要一个漏水的水桶。您需要存储最后一次(unix时间戳)和桶(整数)。每次存储东西时,计算上次保存到缓存后的时间差,以秒为单位将其从桶中减少,然后将INSA桶减少x字节。如果存储桶大于jpeg文件大小,则删除最老的对象以释放所需的空间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7190678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档