From c5d23e27a6a34e02090ebcece60dfa5b7f814488 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Sat, 2 Jan 2010 20:26:33 -1000 Subject: [PATCH] Make caching a plugin system --- lib/cache.php | 113 ++++++++++++++++++++++++++++++++++++++++++++++++++ lib/util.php | 31 ++------------ 2 files changed, 116 insertions(+), 28 deletions(-) create mode 100644 lib/cache.php diff --git a/lib/cache.php b/lib/cache.php new file mode 100644 index 0000000000..d1ba65dab8 --- /dev/null +++ b/lib/cache.php @@ -0,0 +1,113 @@ +. + * + * @category Cache + * @package StatusNet + * @author Evan Prodromou + * @copyright 2009 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +/** + * Interface for caching + * + * An abstract interface for caching. + * + */ + +class Cache +{ + var $_items = array(); + static $_inst = null; + + static function instance() + { + if (is_null(self::$_inst)) { + self::$_inst = new Cache(); + } + + return self::$_inst; + } + + static function key($extra) + { + $base_key = common_config('memcached', 'base'); + + if (empty($base_key)) { + $base_key = common_keyize(common_config('site', 'name')); + } + + return 'statusnet:' . $base_key . ':' . $extra; + } + + static function keyize($str) + { + $str = strtolower($str); + $str = preg_replace('/\s/', '_', $str); + return $str; + } + + function get($key) + { + $value = null; + + if (!Event::handle('StartCacheGet', array(&$key, &$value))) { + if (array_key_exists($_items, $key)) { + common_log(LOG_INFO, 'Cache HIT for key ' . $key); + $value = $_items[$key]; + } else { + common_log(LOG_INFO, 'Cache MISS for key ' . $key); + } + Event::handle('EndCacheGet', array($key, &$value)); + } + + return $value; + } + + function set($key, $value, $flag=null, $expiry=null) + { + $success = false; + + if (!Event::handle('StartCacheSet', array(&$key, &$value, &$flag, &$expiry, &$success))) { + common_log(LOG_INFO, 'Setting cache value for key ' . $key); + $_items[$key] = $value; + $success = true; + Event::handle('EndCacheSet', array($key, $value, $flag, $expiry)); + } + + return $success; + } + + function delete($key) + { + $success = false; + + if (!Event::handle('StartCacheDelete', array(&$key, &$success))) { + common_log(LOG_INFO, 'Deleting cache value for key ' . $key); + unset($_items[$key]); + $success = true; + Event::handle('EndCacheDelete', array($key)); + } + + return $success; + } +} diff --git a/lib/util.php b/lib/util.php index 22dc0f9341..63656b6042 100644 --- a/lib/util.php +++ b/lib/util.php @@ -1384,42 +1384,17 @@ function common_session_token() function common_cache_key($extra) { - $base_key = common_config('memcached', 'base'); - - if (empty($base_key)) { - $base_key = common_keyize(common_config('site', 'name')); - } - - return 'statusnet:' . $base_key . ':' . $extra; + return Cache::key($extra); } function common_keyize($str) { - $str = strtolower($str); - $str = preg_replace('/\s/', '_', $str); - return $str; + return Cache::keyize($str); } function common_memcache() { - static $cache = null; - if (!common_config('memcached', 'enabled')) { - return null; - } else { - if (!$cache) { - $cache = new Memcache(); - $servers = common_config('memcached', 'server'); - if (is_array($servers)) { - foreach($servers as $server) { - $cache->addServer($server); - } - } else { - $cache->addServer($servers); - } - $cache->setCompressThreshold(20000, 0.2); - } - return $cache; - } + return Cache::instance(); } function common_license_terms($uri)