我正在用 PHP 编写缓存 API。它完成了我需要它做的所有事情,但我正在将它贡献回一个项目,其他人可能会用它做其他事情。在代码审查中,我被要求确保它具有缓存 API 中期望的所有标准方法。
我查看了 PHP 的 Memcache API、Zend 的缓存 API 和其他一些 API,但似乎并没有真正的标准。他们当然不同意方法的名称(read()
与 get()
与等等)。
那么,我是否应该确保我可以进行 CRUD 操作并结束工作?是否加入 flush()
以取得良好效果?
或者是否有一种标准通用模型可用于缓存 API?
或者我应该直截了本地坚决主张我们不应该在真正需要之前实现任何东西吗?
最佳答案
你使用什么样的后端缓存?内存缓存?雷迪斯?装甲运兵车?平面文件?
如果您只打算支持一个后端(例如 Memcached),您应该尽可能地遵循该特定后端的方法。
如果您要支持多个后端,您的核心方法可能应该具有它们之间的共同点。
就“标准”而言,大多数人会寻找具有可选到期时间的 SET、GET、EXISTS、DELETE、FLUSH 和(如果可能的话)INCREMENT/DECREMENT,具有相同的方法名称。这些方法几乎在每个缓存 API 中都可用。但更多内容将取决于后端支持什么。
例如,Memcached 支持 CAS、APPEND 和原子 ADD/REPLACE,但许多其他后端不支持。即使您将类似的方法破解到不支持它们的后端,生成的操作也不会是原子的,这可能会导致细微的错误。问题不在于它们还不需要。问题是,如果将它们放在不支持它们的后端上,它们将会出现错误。
Zend_Cache 非常复杂,因为它支持几乎所有可以想到的后端,并且包含许多使它们表现相似的技巧。例如,它大量使用锁定来防止平面文件操作的潜在竞争条件。但是,如果那是您所追求的,您可能不应该重新发明轮子。
关于php - 缓存 API/接口(interface)以用作模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9935414/