我在这里已经阅读过以前的答案,关于PHP中的缓存以及它们链接到的文章。我查看了经常推荐的Pear Cache_Light,QuickCache和WordPress超级缓存。 (对不起 - 显然我只允许超链接一次。)
要么没有处理并发问题,要么没有人明确地在文档中提到它们。
有人能指出我处理并发的PHP页面缓存的方向吗?
这是在共享主机上,所以很遗憾,memcache和操作码缓存不是一个选项。我不使用模板引擎,并希望避免依赖它。 WP Super Cache的方法更可取 - 即在wwwroot下存储静态文件以让Apache为它们提供服务 - 但不是必需的。
谢谢!
P.S。应自动处理的事项示例:
答案 0 :(得分:2)
似乎PEAR :: Cache_Lite具有处理并发问题的某种安全性。
如果你看一下constructor Cache_Lite::Cache_Lite
的手册,你有这些选择:
<强> fileLocking 强> 启用/禁用fileLocking。可以避免恶意下的缓存损坏 情况。
<强> writeControl 强> 启用/禁用写入控制。启用写入控制将会轻微减慢 缓存写入但不是缓存 读。写控制可以检测到一些 损坏的缓存文件,但也许不是 一个完美的控制。
<强> readControl 强> 启用/禁用读取控制。如果启用,则嵌入控制键 缓存文件与此密钥进行比较 与之后计算的那个 读
<强> readControlType 强> 读控制的类型(仅当启用了读控制时)。必须是'md5' (对于md5哈希控件(最好但是 最慢)),'crc32'(对于crc32哈希 控制(轻微安全但是 更快))或'strlen'(长度 只测试(最快))
使用哪一个仍然取决于您,并取决于您准备牺牲的性能类型 - 以及应用程序中可能存在的并发访问风险。
您可能还想查看Zend_Cache_Frontend_Output
,使用Zend_Cache_Backend_File
之类的内容作为后端来缓存页面。
那个似乎也支持某种安全性 - Cache_Lite
已经给你的东西也是如此(所以我不会第二次复制粘贴)
作为旁注,如果您的网站在共享主机上运行,我认为它没有那么多用户?因此,并发访问的风险可能不高,是吗?
无论如何,我可能不会再搜索那些牵引框架提出的建议:它已经足以满足您的应用需求: - )
(我从来没有见过任何缓存机制“比那些允许你做的更安全”......而且我从来没有遇到过那种灾难性的并发问题......在3年内PHP开发)
无论如何:玩得开心!
答案 1 :(得分:1)
我很想修改一个现有的缓存。 Zend Framework的缓存应该能够做到这一点。如果没有,我会改变它。
您可以创建一个非常原始的锁定策略。该数据库可用于跟踪所有缓存的项目,允许锁定更新,允许人们等待其他人的更新完成,...
这将处理您的ACID问题。您可以将其他人的更新锁定设置为非常短的时间段,或者可能只是为了该往返而完全跳过缓存,具体取决于您的服务器负载/容量以及生成缓存内容的成本。
雅各
答案 2 :(得分:1)
并发资源创建即缓存砰击/线程竞争在繁忙的网站上可能是一个严重的问题。这就是为什么我创建了同步读/写进程/线程的缓存库。
它具有优雅和清晰的结构:接口 - &gt;适配器 - &gt;容易扩展的类。在github页面我详细解释了砰击的问题以及图书馆如何解决它。
答案 3 :(得分:0)
答案 4 :(得分:0)
假设一个日志文件系统(大多数Linux文件系统和NTFS) - 然后在该过程之前不应将该文件视为“已创建” 关闭文件。这应该显示为不存在的文件!
不,它一旦被创建就可见,你必须锁定它。 重命名是原子的。所以你可以打开(),写(),关闭(),重命名(),但这不会阻止同时重新创建两次相同的缓存项。
已删除缓存文件,因为它已过时。 对该文件的请求进入,文件正在重新创建。在此期间,另一个文件请求就出现了。
如果未锁定,将提供半完成文件,或者两个进程将尝试同时重新生成同一文件,从而产生“有趣”的结果。
答案 5 :(得分:0)
您可以在数据库中缓存页面,只需创建一个简单的“名称,值”表并在其上存储缓存页面。