所以,我有一个问题,一个引擎上有五个域,引擎使用Doctrine 1.2 ORM,所有查询都使用memcache缓存(Doctrine_Cache_Memcache)。如何为每个域创建密钥前缀并通过domainprefix_key从缓存中获取?感谢。
答案 0 :(得分:3)
您可以创建扩展或组成 Doctrine_Cache_Memcache 的衍生产品。在衍生产品中,您只需在将执行权传递给 Doctrine_Cache_Memcache 之前,通过预先设置密钥的域部分来修改 id 。
这是一个考虑使用继承,覆盖 _doSave 方法的示例;其他公众成员可以用类似的方式改写。
<?php
class DomainCache extends Doctrine_Cache_Memcache
{
private function _getDomain()
{
// this could pull from config, a database, it
// could even be hardcoded on a per-project basis - YMMV!
}
/**
* Given the normal id the application would use, prefix
* it with the appropriate domain.
*/
private function _getDomainId($id)
{
return $this->_getDomain() . '_' . $id;
}
/**
* Save a cache record directly. This method is implemented by the cache
* drivers and used in Doctrine_Cache_Driver::save().
* Overridden such that a domain-specific key is used.
*
* @param string $id cache id
* @param string $data data to cache
* @param int $lifeTime if != false, set a specific lifetime for this
* cache record (null => infinite lifeTime)
* @return boolean true if no problem
*/
protected function _doSave($id, $data, $lifeTime = false)
{
return parent::_doSave($this->_getDomainId($id), $data, $lifeTime);
}
}
如果您对撰写 Doctrine_Cache_Memcache 感兴趣,例如假设您想扩展为 _getDomain 提供实际工作的任何内容,您可以实现 Doctrine_Class_Interface < / strong>而不是。