3 * Laconica - a distributed open-source microblogging tool
4 * Copyright (C) 2008, Controlez-Vous, Inc.
6 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU Affero General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU Affero General Public License for more details.
16 * You should have received a copy of the GNU Affero General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
20 if (!defined('LACONICA')) { exit(1); }
22 require_once INSTALLDIR.'/classes/Memcached_DataObject.php';
24 class Memcached_DataObject extends DB_DataObject
26 function &staticGet($cls, $k, $v=NULL) {
35 $i = Memcached_DataObject::getcached($cls, $k, $v);
39 $i = DB_DataObject::staticGet($cls, $k, $v);
48 $result = parent::insert();
55 function update($orig=NULL) {
56 if (!is_null($orig)) {
57 $orig->decache(); # might be different keys
59 $result = parent::update($orig);
66 $this->decache(); # while we still have the values!
67 return parent::delete();
70 static function memcache() {
71 if (!common_config('memcached', 'enabled')) {
74 $cache = new Memcache();
75 $res = $cache->connect(common_config('memcached', 'server'),
76 common_config('memcached', 'port'));
77 return ($res) ? $cache : NULL;
81 static function cacheKey($cls, $k, $v) {
82 return common_cache_key(strtolower($cls).':'.$k.':'.$v);
85 static function getcached($cls, $k, $v) {
86 $c = Memcached_DataObject::memcache();
90 return $c->get(Memcached_DataObject::cacheKey($cls, $k, $v));
95 global $_DB_DATAOBJECT;
96 if (!isset($_DB_DATAOBJECT['INI'][$this->_database][$this->__table."__keys"])) {
97 $this->databaseStructure();
100 return $_DB_DATAOBJECT['INI'][$this->_database][$this->__table."__keys"];
104 $c = $this->memcache();
109 $types = $this->keyTypes();
111 foreach ($types as $key => $type) {
117 $c->set($this->cacheKey($this->tableName(), $key, $v),
122 # XXX: figure out what to do with compound pkeys
123 if (count($primary) == 1) {
125 $c->set($this->cacheKey($this->tableName(), $key, $this->$key),
132 $c = $this->memcache();
137 $types = $this->keyTypes();
139 foreach ($types as $key => $type) {
141 $primary[] = $this->$key;
143 $c->delete($this->cacheKey($this->tableName(), $key, $this->$key));
146 # XXX: figure out what to do with compound pkeys
147 if (count($primary) == 1) {
149 $c->delete($this->cacheKey($this->tableName(), $key, $this->$key));