_ci =& get_instance(); } public function find($type, $conditions = array(), $sql = NULL, $bindings = array()) { $enabled = false; if($enabled) { $key = $type . '_' . md5($type . '_' . implode('_', $conditions) . '_' . $sql); if(!($ret = $this->_cache($key, ['group' => $type]))) { $ret = parent::find( $type, $conditions, $sql, $bindings ); $this->_cache($key, ['value' => $ret, 'group' => $type]); } return $ret; } return parent::find( $type, $conditions, $sql, $bindings ); } /** * Loads a bean by type and id. If the bean cannot be found an * empty bean will be returned instead. This is a cached version * of the loader, if the bean has been cached it will be served * from cache, otherwise the bean will be retrieved from the database * as usual an a new cache entry will be added.. * * @param string $type type of bean you are looking for * @param integer $id identifier of the bean * * @return \RedBeanPHP\OODBBean $bean the bean object found */ public function load( $type, $id ) { $bean = null; if ($bean = $this->_cache($type.'_load_'.$id, ['group' => $type])) { $this->hits++; } else { $this->misses++; $bean = parent::load( $type, $id ); if ( $bean->id ) $this->_cache($type.'_load_'.$id, ['value' => $bean, 'group' => $type]); } return $bean; } /** * Stores a RedBean OODBBean and caches it. * * @param \RedBeanPHP\OODBBean $bean the bean you want to store * * @return mixed */ public function store( $bean ) { $id = parent::store( $bean ); $type = $bean->getMeta( 'type' ); $this->_clearCacheGroup($type); $this->_cache($type.'_load_'.$id, ['value' => $bean, 'group' => $type]); return $id; } /** * Trashes a RedBean OODBBean and removes it from cache. * * @param OODBBean $bean bean * * @return mixed */ public function trash( $bean ) { $type = $bean->getMeta( 'type' ); $id = $bean->id; $ret = parent::trash( $bean ); $this->_clearCacheGroup($type); return $ret; } /** * Flushes the cache completely. * * @return RedBean_Plugin_Cache */ public function flushAll() { $this->_cleanCache(); return $this; } /** * Returns the number of hits. If a call to load() or * batch() can use the cache this counts as a hit. * Otherwise it's a miss. * * @return integer */ public function getHits() { return $this->hits; } /** * Returns the number of hits. If a call to load() or * batch() can use the cache this counts as a hit. * Otherwise it's a miss. * * @return integer */ public function getMisses() { return $this->misses; } /** * Resets hits counter to 0. */ public function resetHits() { $this->hits = 0; } /** * Resets misses counter to 0. */ public function resetMisses() { $this->misses = 0; } }