A Propel ORM behavior that provide auto data caching to your model. Based on Propel 1.6 work of SNakano.
- support caching system APC, memcached and Redis (via DoctrineCache)
- auto caching and auto flush.
Query Cache Behavior is caching transformation of a query object (caching SQL code). This Behavior is caching the results of database. (caching result data)
- PHP >= 5.3
- Propel >= 2.0.0
- DoctrineCacheFactory
Add a dependency on thefuriouscoder/propel2-data-cache-behavior
to your project's composer.json
file.
{
"require": {
"thefuriouscoder/propel2-data-cache-behavior": "dev-master"
}
}
<table name="book">
<column name="id" required="true" primaryKey="true" autoIncrement="true" type="INTEGER" />
<column name="title" type="VARCHAR" required="true" primaryString="true" />
<behavior name="data_cache">
<parameter name="backend" value="apc" /> <!-- cache system. "apc" or "memcache", default "apc". (optional) -->
<parameter name="lifetime" value="3600" /> <!-- cache expire time (second). default 3600 (optional) -->
<parameter name="auto_cache" value="true" /> <!-- auto cache enable. default true (optional) -->
</behavior>
</table>
Add the following configuration code to your project bootstraping file depending on the storage you are goinng to use.
// configure memcached setting.
TFC\Cache\DoctrineCacheFactory::setOption(
array(
'storage' => 'memcached',
'prefix' => 'rlyeh',
'default_ttl' => 3600,
'servers' => array(
array('server1', 11211, 20),
array('server2', 11211, 80)
)
)
);
// configure APC setting.
TFC\Cache\DoctrineCacheFactory::setOption(
array(
'storage' => 'apc',
'default_ttl' => 3600
)
);
// configure Redis setting.
TFC\Cache\DoctrineCacheFactory::setOption(
array(
'storage' => 'redis',
'prefix' => 'rlyeh',
'host => '127.0.0.1',
'port' => 6379,
'default_ttl' => 3600
)
);
$title = 'Cthulhu Mythos';
BookQuery::create()
->filterByTitle($title)
->findOne(); // from Database
BookQuery::create()
->filterByTitle($title)
->findOne(); // from caching system
$title = 'Cthulhu Mythos';
BookQuery::create()
->setCacheDisable() // disable cache
->filterByTitle($title)
->findOne();
- setCacheEnable()
- setCacheDisable()
- isCacheEnable()
- setLifetime($ttl)
$book = new Book;
$book->setId(1);
$book->setTitle("Cthulhu Myhtos");
$book->save(); // purge cache.
- expire cache lifetime.
- call
save()
method. - call
delete()
method. - call
BookQuery::doDeleteAll()
method. - call
BookQuery::purgeCache()
method.
$title = 'Cthulhu Mythos';
$query = BookQuery::create();
$book = $query->filterByTitle($title)->findOne();
$cacheKey = $query->getCacheKey(); // get cache key.
BookPeer::cacheDelete($cacheKey); // delete cache by key.
MIT License