Php 缓存用作模型的API/接口

Php 缓存用作模型的API/接口,php,oop,api,caching,interface,Php,Oop,Api,Caching,Interface,我正在用PHP编写一个缓存API。它做了我需要它做的一切,但我正在把它贡献给一个项目,其他人可能会用它做其他事情。在代码审查中,我被要求确保它具有缓存API中所需的所有标准方法 我看过PHP的Memcache API、Zend的缓存API和其他一些API,但似乎并没有真正的标准。他们当然不同意方法的名称(read()vs.get()vs.等等) 那么,我是否应该确保我可以进行CRUD操作并结束这一天?加入一个flush() 还是有一种标准的通用模型可以用于缓存API 或者我应该走到垫子上,激烈地

我正在用PHP编写一个缓存API。它做了我需要它做的一切,但我正在把它贡献给一个项目,其他人可能会用它做其他事情。在代码审查中,我被要求确保它具有缓存API中所需的所有标准方法

我看过PHP的Memcache API、Zend的缓存API和其他一些API,但似乎并没有真正的标准。他们当然不同意方法的名称(
read()
vs.
get()
vs.等等)

那么,我是否应该确保我可以进行CRUD操作并结束这一天?加入一个
flush()

还是有一种标准的通用模型可以用于缓存API


或者我应该走到垫子上,激烈地争辩说,在实际需要之前,我们不应该实现任何东西?

您使用什么样的后端作为缓存?内存缓存?雷迪斯?APC?平面文件

  • 如果您只打算支持一个后端(比如Memcached),那么您可能应该尽可能地遵循该部分后端的方法

  • 如果您要支持多个后端,那么您的核心方法应该具有所有后端的共同点

就“标准”而言,大多数人会寻找具有相同方法名称的可选过期、获取、存在、删除、刷新和(如果可能)递增/递减的集合。这些方法在几乎所有缓存API中都可用。但是更多的事情将取决于后端支持什么

例如,Memcached支持CAS、APPEND和原子添加/替换,但许多其他后端不支持。即使你在一个不支持它们的后端上使用类似的方法,所产生的操作也不会是原子的,这可能会导致一些微妙的错误。问题不在于它们还不需要。问题是,如果将它们安装到不支持它们的后端,它们将有问题

Zend_缓存非常复杂,因为它支持几乎所有可能的后端,并包含许多使它们行为类似的技巧。例如,它大量使用锁定来防止平面文件操作出现潜在的争用情况。但如果你想要的是车轮的话,你可能就不应该重新发明车轮了