CC-2166: Packaging Improvements. Moved the Zend app into airtime_mvc. It is now installed to /var/www/airtime. Storage is now set to /srv/airtime/stor. Utils are now installed to /usr/lib/airtime/utils/. Added install/airtime-dircheck.php as a simple test to see if everything is install/uninstalled correctly.

This commit is contained in:
Paul Baranowski 2011-04-14 18:55:04 -04:00
parent 514777e8d2
commit b11cbd8159
4546 changed files with 138 additions and 51 deletions

View file

@ -0,0 +1,103 @@
= Query Cache Behavior =
The `query_cache` behavior gives a speed boost to Propel queries by caching the transformation of a PHP Query object into reusable SQL code.
== Basic Usage ==
In the `schema.xml`, use the `<behavior>` tag to add the `query_cache` behavior to a table:
{{{
#!xml
<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="query_cache" />
</table>
}}}
After you rebuild your model, all the queries on this object can now be cached. To trigger the query cache on a particular query, just give it a query key using the `setQueryKey()` method. The key is a unique identifier that you can choose, later used for cache lookups:
{{{
#!php
<?php
$title = 'War And Peace';
$books = BookQuery::create()
->setQueryKey('search book by title')
->filterByTitle($title)
->findOne();
}}}
The first time Propel executes the termination method, it computes the SQL translation of the Query object and stores it into a cache backend (APC by default). Next time you run the same query, it executes faster, even with different parameters:
{{{
#!php
<?php
$title = 'Anna Karenina';
$books = BookQuery::create()
->setQueryKey('search book by title')
->filterByTitle($title)
->findOne();
}}}
'''Tip''': The more complex the query, the greater the boost you get from the query cache behavior.
== Parameters ==
You can change the cache backend and the cache lifetime (in seconds) by setting the `backend` and `lifetime` parameters:
{{{
#!xml
<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="query_cache">
<parameter name="backend" value="custom" />
<parameter name="lifetime" value="600" />
</behavior>
</table>
}}}
To implement a custom cache backend, just override the generated `cacheContains()`, `cacheFetch()` and `cacheStore()` methods in the Query object. For instance, to implement query cache using Zend_Cache and memcached, try the following:
{{{
#!php
<?php
class BookQuery extends BaseBookQuery
{
public function cacheContains($key)
{
return $this->getCacheBackend()->test($key);
}
public function cacheFetch($key)
{
return $this->getCacheBackend()->load($key);
}
public function cacheStore($key, $value)
{
return $this->getCacheBackend()->save($key, $value);
}
protected function getCacheBackend()
{
if (self::$cacheBackend === null) {
$frontendOptions = array(
'lifetime' => 7200,
'automatic_serialization' => true
);
$backendOptions = array(
'servers' => array(
array(
'host' => 'localhost',
'port' => 11211,
'persistent' => true
)
)
);
self::$cacheBackend = Zend_Cache::factory('Core', 'Memcached', $frontendOptions, $backendOptions);
}
return self::$cacheBackend;
}
}
}}}