Turns the Writer Cache on or off. The Writer Cache is a simple
query based caching system that may improve performance without the need
for cache management. This caching system will cache non-modifying queries
that are marked with special SQL comments. As soon as a non-marked query
gets executed the cache will be flushed. Only non-modifying select queries
have been marked therefore this mechanism is a rather safe way of caching, requiring
no explicit flushes or reloads. Of course this does not apply if you intend to test
or simulate concurrent querying.
public static useWriterCache ( boolean $yesNo ) : void | ||
$yesNo | boolean | TRUE to enable cache, FALSE to disable cache |
Résultat | void |
/** * Test effects of cache. * * @return void */ public function testCachingEffects() { testpack('Testing WriteCache Query Writer Cache'); R::useWriterCache(FALSE); R::debug(true, 1); $logger = R::getDatabaseAdapter()->getDatabase()->getLogger(); $book = R::dispense('book')->setAttr('title', 'ABC'); $book->ownPage[] = R::dispense('page'); $id = R::store($book); // Test load cache -- without $logger->clear(); $book = R::load('book', $id); $book = R::load('book', $id); asrt(count($logger->grep('SELECT')), 2); // With cache R::useWriterCache(TRUE); $logger->clear(); $book = R::load('book', $id); $book = R::load('book', $id); asrt(count($logger->grep('SELECT')), 1); R::useWriterCache(FALSE); // Test find cache $logger->clear(); $book = R::find('book'); $book = R::find('book'); asrt(count($logger->grep('SELECT')), 2); // With cache R::getWriter()->setUseCache(TRUE); $logger->clear(); $book = R::find('book'); $book = R::find('book'); asrt(count($logger->grep('SELECT')), 1); R::getWriter()->setUseCache(FALSE); // Test combinations $logger->clear(); $book = R::findOne('book', ' id = ? ', array($id)); $book->ownPage; R::batch('book', array($id)); $book = R::findOne('book', ' id = ? ', array($id)); $book->ownPage; R::batch('book', array($id)); asrt(count($logger->grep('SELECT')), 6); // With cache R::getWriter()->setUseCache(TRUE); $logger->clear(); R::batch('book', array($id)); $book = R::findOne('book', ' id = ? ', array($id)); $book->ownPage; $book = R::findOne('book', ' id = ? ', array($id)); $book->ownPage; asrt(count($logger->grep('SELECT')), 3); R::getWriter()->setUseCache(FALSE); // Test auto flush $logger->clear(); $book = R::findOne('book'); $book->name = 'X'; R::store($book); $book = R::findOne('book'); asrt(count($logger->grep('SELECT *')), 2); // With cache R::getWriter()->setUseCache(TRUE); $logger->clear(); $book = R::findOne('book'); $book->name = 'Y'; // Will flush R::store($book); $book = R::findOne('book'); // Now the same, auto flushed asrt(count($logger->grep('SELECT *')), 2); R::getWriter()->setUseCache(FALSE); // Test whether delete flushes as well (because uses selectRecord - might be a gotcha!) R::store(R::dispense('garbage')); $garbage = R::findOne('garbage'); $logger->clear(); $book = R::findOne('book'); R::trash($garbage); $book = R::findOne('book'); asrt(count($logger->grep('SELECT *')), 2); R::store(R::dispense('garbage')); $garbage = R::findOne('garbage'); // With cache R::getWriter()->setUseCache(TRUE); $logger->clear(); $book = R::findOne('book'); R::trash($garbage); $book = R::findOne('book'); // Now the same, auto flushed asrt(count($logger->grep('SELECT *')), 2); R::getWriter()->setUseCache(FALSE); R::store(R::dispense('garbage')); $garbage = R::findOne('garbage'); // With cache R::getWriter()->setUseCache(TRUE); $logger->clear(); $book = R::findOne('book'); R::getWriter()->queryRecord('garbage', array('id' => array($garbage->id))); $book = R::findOne('book'); // Now the same, auto flushed asrt(count($logger->grep('SELECT *')), 2); $page = R::dispense('page'); $book->sharedPage[] = $page; R::store($book); $logger->clear(); $link = R::getWriter()->queryRecordLink('book', 'page', $book->id, $page->id); asrt(count($logger->grep('SELECT')), 1); $link = R::getWriter()->queryRecordLink('book', 'page', $book->id, $page->id); asrt(count($logger->grep('SELECT')), 1); R::getWriter()->setUseCache(FALSE); $link = R::getWriter()->queryRecordLink('book', 'page', $book->id, $page->id); asrt(count($logger->grep('SELECT')), 2); R::getWriter()->setUseCache(TRUE); }