Lei*_*igh 6 php caching mongodb
我一直在尝试编写"好代码"并使用依赖注入来传递我的类的构造函数中的数据库对象.
构造函数通常采用以下形式:
public function __construct(MongoDB $db) {
$this->collection = $db->collectionName;
}
Run Code Online (Sandbox Code Playgroud)
我注意到,对于创建的每个对象,都会创建一个新 对象MongoCollection.(即访问 $db->collectionName 属性两次返回两个不同的对象,而不是同一个对象)
我一直在使用ActiveRecord样式基类,因此对象可以自己CRUD.
现在,当我使用某种getAllRecords()功能,并返回100个这些对象时,MongoCollection会创建100个对象.(快速查看驱动程序源似乎表明在那里也创建了新对象,而不仅仅是PHP中的新表示)
我通过包装两个类Mongo和MongoDB类来实现缓存,从而解决了这个问题.
class MyMongo extends Mongo
{
private $objectCache = array();
public function __get($name) {
return array_key_exists($name, $this->objectCache)
? $this->objectCache[$name]
: $this->objectCache[$name] = new MyMongoDB($this, $name);
}
}
class MyMongoDB extends MongoDB
{
private $objectCache = array();
public function __get($name) {
return array_key_exists($name, $this->objectCache)
? $this->objectCache[$name]
: $this->objectCache[$name] = new MongoCollection($this, $name);
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题如下:
MongoDB和/ 或MongoCollection对象以及重新使用它们来为自己造成问题.谢谢,
利.
| 归档时间: |
|
| 查看次数: |
1091 次 |
| 最近记录: |