From ba10c91d0e0fe444d3d9a4658ad73a1772b62d9e Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Fri, 22 Apr 2016 23:26:04 +0900 Subject: [PATCH] Change default cache driver to 'dummy' with minimal caching --- common/framework/cache.php | 36 +++++-- common/framework/drivers/cache/apc.php | 3 +- common/framework/drivers/cache/dummy.php | 107 +++++-------------- common/framework/drivers/cache/file.php | 3 +- common/framework/drivers/cache/memcached.php | 3 +- common/framework/drivers/cache/redis.php | 3 +- common/framework/drivers/cache/sqlite.php | 3 +- common/framework/drivers/cache/wincache.php | 3 +- common/framework/drivers/cache/xcache.php | 3 +- common/framework/drivers/cacheinterface.php | 3 +- modules/counter/counter.model.php | 4 +- modules/document/document.model.php | 2 +- modules/member/member.model.php | 6 +- modules/module/module.model.php | 34 +++--- modules/widget/widget.controller.php | 2 +- 15 files changed, 95 insertions(+), 120 deletions(-) diff --git a/common/framework/cache.php b/common/framework/cache.php index 955c8e157..55e831beb 100644 --- a/common/framework/cache.php +++ b/common/framework/cache.php @@ -64,7 +64,7 @@ class Cache } else { - self::$_driver = new Drivers\Cache\File(array()); + self::$_driver = new Drivers\Cache\Dummy(array()); } if (self::$_driver->prefix) @@ -129,13 +129,34 @@ class Cache /** * Get the automatically generated cache prefix for this installation of Rhymix. * - * return object|null + * @return object|null */ public static function getCachePrefix() { return self::$_prefix; } + /** + * Get the default TTL. + * + * @return int + */ + public static function getDefaultTTL() + { + return self::$_ttl; + } + + /** + * Set the default TTL. + * + * @param int $ttl + * @return void + */ + public static function setDefaultTTL($ttl) + { + self::$_ttl = $ttl; + } + /** * Get the value of a key. * @@ -160,26 +181,29 @@ class Cache * Set the value to a key. * * This method returns true on success and false on failure. - * $ttl is measured in seconds. If it is zero, the key should not expire. + * $ttl is measured in seconds. If it is not given, the default TTL is used. + * $force is used to cache essential data when using the default driver. * * @param string $key * @param mixed $value * @param int $ttl (optional) + * @param bool $force (optional) * @return bool */ - public static function set($key, $value, $ttl = null) + public static function set($key, $value, $ttl = 0, $force = false) { if (self::$_driver !== null) { + $ttl = intval($ttl); if ($ttl >= (3600 * 24 * 30)) { $ttl = min(3600 * 24 * 30, max(0, $ttl - time())); } - if ($ttl === null) + if ($ttl === 0) { $ttl = self::$_ttl; } - return self::$_driver->set(self::getRealKey($key), $value, intval($ttl)) ? true : false; + return self::$_driver->set(self::getRealKey($key), $value, $ttl, $force) ? true : false; } else { diff --git a/common/framework/drivers/cache/apc.php b/common/framework/drivers/cache/apc.php index b77c2941a..aa4817a7a 100644 --- a/common/framework/drivers/cache/apc.php +++ b/common/framework/drivers/cache/apc.php @@ -71,9 +71,10 @@ class APC implements \Rhymix\Framework\Drivers\CacheInterface * @param string $key * @param mixed $value * @param int $ttl + * @param bool $force * @return bool */ - public function set($key, $value, $ttl) + public function set($key, $value, $ttl = 0, $force = false) { return apc_store($key, $value, $ttl); } diff --git a/common/framework/drivers/cache/dummy.php b/common/framework/drivers/cache/dummy.php index 7818afa58..79ffdee6e 100644 --- a/common/framework/drivers/cache/dummy.php +++ b/common/framework/drivers/cache/dummy.php @@ -5,7 +5,7 @@ namespace Rhymix\Framework\Drivers\Cache; /** * The dummy cache driver. */ -class Dummy implements \Rhymix\Framework\Drivers\CacheInterface +class Dummy extends File implements \Rhymix\Framework\Drivers\CacheInterface { /** * Set this flag to false to disable cache prefixes. @@ -17,42 +17,6 @@ class Dummy implements \Rhymix\Framework\Drivers\CacheInterface */ public $data = array(); - /** - * Create a new instance of the current cache driver, using the given settings. - * - * @param array $config - * @return void - */ - public function __construct(array $config) - { - - } - - /** - * Check if the current cache driver is supported on this server. - * - * This method returns true on success and false on failure. - * - * @return bool - */ - public function isSupported() - { - return true; - } - - /** - * Validate cache settings. - * - * This method returns true on success and false on failure. - * - * @param mixed $config - * @return bool - */ - public static function validateSettings($config) - { - return true; - } - /** * Get the value of a key. * @@ -63,7 +27,12 @@ class Dummy implements \Rhymix\Framework\Drivers\CacheInterface */ public function get($key) { - if (isset($this->data[$key])) + $value = parent::get($key); + if ($value !== null) + { + return $value; + } + elseif (isset($this->data[$key])) { if ($this->data[$key][0] > 0 && $this->data[$key][0] < time()) { @@ -87,12 +56,20 @@ class Dummy implements \Rhymix\Framework\Drivers\CacheInterface * @param string $key * @param mixed $value * @param int $ttl + * @param bool $force * @return bool */ - public function set($key, $value, $ttl) + public function set($key, $value, $ttl = 0, $force = false) { - $this->data[$key] = array($ttl ? (time() + $ttl) : 0, $value); - return true; + if ($force) + { + return parent::set($key, $value, $ttl, $force); + } + else + { + $this->data[$key] = array($ttl ? (time() + $ttl) : 0, $value); + return true; + } } /** @@ -106,7 +83,11 @@ class Dummy implements \Rhymix\Framework\Drivers\CacheInterface */ public function delete($key) { - if (isset($this->data[$key])) + if (parent::delete($key)) + { + return true; + } + elseif (isset($this->data[$key])) { unset($this->data[$key]); return true; @@ -127,46 +108,7 @@ class Dummy implements \Rhymix\Framework\Drivers\CacheInterface */ public function exists($key) { - return isset($this->data[$key]); - } - - /** - * Increase the value of a key by $amount. - * - * If the key does not exist, this method assumes that the current value is zero. - * This method returns the new value. - * - * @param string $key - * @param int $amount - * @return int - */ - public function incr($key, $amount) - { - if (isset($this->data[$key])) - { - $this->data[$key][1] += $amount; - return $this->data[$key][1]; - } - else - { - $this->set($key, $amount, 0); - return $amount; - } - } - - /** - * Decrease the value of a key by $amount. - * - * If the key does not exist, this method assumes that the current value is zero. - * This method returns the new value. - * - * @param string $key - * @param int $amount - * @return int - */ - public function decr($key, $amount) - { - return $this->incr($key, 0 - $amount); + return parent::exists($key) || isset($this->data[$key]); } /** @@ -178,6 +120,7 @@ class Dummy implements \Rhymix\Framework\Drivers\CacheInterface */ public function clear() { + parent::clear(); $this->data = array(); return true; } diff --git a/common/framework/drivers/cache/file.php b/common/framework/drivers/cache/file.php index 6159461e2..e95db4ff5 100644 --- a/common/framework/drivers/cache/file.php +++ b/common/framework/drivers/cache/file.php @@ -96,9 +96,10 @@ class File implements \Rhymix\Framework\Drivers\CacheInterface * @param string $key * @param mixed $value * @param int $ttl + * @param bool $force * @return bool */ - public function set($key, $value, $ttl) + public function set($key, $value, $ttl = 0, $force = false) { return Storage::writePHPData($this->_getFilename($key), array($ttl ? (time() + $ttl) : 0, $value), $key); } diff --git a/common/framework/drivers/cache/memcached.php b/common/framework/drivers/cache/memcached.php index b8e836afc..deae2e7f1 100644 --- a/common/framework/drivers/cache/memcached.php +++ b/common/framework/drivers/cache/memcached.php @@ -136,9 +136,10 @@ class Memcached implements \Rhymix\Framework\Drivers\CacheInterface * @param string $key * @param mixed $value * @param int $ttl + * @param bool $force * @return bool */ - public function set($key, $value, $ttl) + public function set($key, $value, $ttl = 0, $force = false) { if ($this->_ext === 'Memcached') { diff --git a/common/framework/drivers/cache/redis.php b/common/framework/drivers/cache/redis.php index 4f0cf8401..9f9b19775 100644 --- a/common/framework/drivers/cache/redis.php +++ b/common/framework/drivers/cache/redis.php @@ -144,9 +144,10 @@ class Redis implements \Rhymix\Framework\Drivers\CacheInterface * @param string $key * @param mixed $value * @param int $ttl + * @param bool $force * @return bool */ - public function set($key, $value, $ttl) + public function set($key, $value, $ttl = 0, $force = false) { try { diff --git a/common/framework/drivers/cache/sqlite.php b/common/framework/drivers/cache/sqlite.php index a54996ebb..3fc8c7651 100644 --- a/common/framework/drivers/cache/sqlite.php +++ b/common/framework/drivers/cache/sqlite.php @@ -130,9 +130,10 @@ class SQLite implements \Rhymix\Framework\Drivers\CacheInterface * @param string $key * @param mixed $value * @param int $ttl + * @param bool $force * @return bool */ - public function set($key, $value, $ttl) + public function set($key, $value, $ttl = 0, $force = false) { $table = 'cache_' . (crc32($key) % 32); $stmt = $this->_dbh->prepare('INSERT OR REPLACE INTO ' . $table . ' (k, v, exp) VALUES (:key, :val, :exp)'); diff --git a/common/framework/drivers/cache/wincache.php b/common/framework/drivers/cache/wincache.php index 036bf8ec7..7cf06ba7f 100644 --- a/common/framework/drivers/cache/wincache.php +++ b/common/framework/drivers/cache/wincache.php @@ -71,9 +71,10 @@ class WinCache implements \Rhymix\Framework\Drivers\CacheInterface * @param string $key * @param mixed $value * @param int $ttl + * @param bool $force * @return bool */ - public function set($key, $value, $ttl) + public function set($key, $value, $ttl = 0, $force = false) { return wincache_ucache_set($key, $value, $ttl); } diff --git a/common/framework/drivers/cache/xcache.php b/common/framework/drivers/cache/xcache.php index bdbca3570..f5d27ab50 100644 --- a/common/framework/drivers/cache/xcache.php +++ b/common/framework/drivers/cache/xcache.php @@ -71,9 +71,10 @@ class XCache implements \Rhymix\Framework\Drivers\CacheInterface * @param string $key * @param mixed $value * @param int $ttl + * @param bool $force * @return bool */ - public function set($key, $value, $ttl) + public function set($key, $value, $ttl = 0, $force = false) { return xcache_set($key, $value, $ttl); } diff --git a/common/framework/drivers/cacheinterface.php b/common/framework/drivers/cacheinterface.php index 1b7a8a646..6b42f40ea 100644 --- a/common/framework/drivers/cacheinterface.php +++ b/common/framework/drivers/cacheinterface.php @@ -53,9 +53,10 @@ interface CacheInterface * @param string $key * @param mixed $value * @param int $ttl + * @param bool $force * @return bool */ - public function set($key, $value, $ttl); + public function set($key, $value, $ttl = 0, $force = false); /** * Delete a key. diff --git a/modules/counter/counter.model.php b/modules/counter/counter.model.php index 2290b4402..961201c12 100644 --- a/modules/counter/counter.model.php +++ b/modules/counter/counter.model.php @@ -43,7 +43,7 @@ class counterModel extends counter if($iplogged) { - Rhymix\Framework\Cache::set($group_key . ':' . $cache_key, $iplogged); + Rhymix\Framework\Cache::set($group_key . ':' . $cache_key, $iplogged, 0, true); } return $iplogged; @@ -79,7 +79,7 @@ class counterModel extends counter if($insertedTodayStatus) { - Rhymix\Framework\Cache::set($cache_key, true); + Rhymix\Framework\Cache::set($cache_key, true, 0, true); $_old_date = date('Ymd', strtotime('-1 day')); Rhymix\Framework\Cache::delete('counter:insertedTodayStatus:' . $site_srl . '_' . $_old_date); } diff --git a/modules/document/document.model.php b/modules/document/document.model.php index a1c8a3216..5d305b70e 100644 --- a/modules/document/document.model.php +++ b/modules/document/document.model.php @@ -429,7 +429,7 @@ class documentModel extends document $keys = $oExtraVar->getExtraVars(); if(!$keys) $keys = array(); - Rhymix\Framework\Cache::set("site_and_module:module_document_extra_keys:$module_srl", $keys); + Rhymix\Framework\Cache::set("site_and_module:module_document_extra_keys:$module_srl", $keys, 0, true); } diff --git a/modules/member/member.model.php b/modules/member/member.model.php index 0cb353e36..3043f600f 100644 --- a/modules/member/member.model.php +++ b/modules/member/member.model.php @@ -496,7 +496,7 @@ class memberModel extends member $output = executeQueryArray('member.getMemberGroups', $args); $group_list = $output->data; //insert in cache - Rhymix\Framework\Cache::set($cache_key, $group_list); + Rhymix\Framework\Cache::set($cache_key, $group_list, 0, true); } if(!$group_list) return array(); @@ -541,7 +541,7 @@ class memberModel extends member $args->site_srl = $site_srl; $output = executeQuery('member.getDefaultGroup', $args, $columnList); $default_group = $output->data; - Rhymix\Framework\Cache::set("member:default_group:$site_srl", $default_group); + Rhymix\Framework\Cache::set("member:default_group:$site_srl", $default_group, 0, true); } return $default_group; @@ -591,7 +591,7 @@ class memberModel extends member $args->order_type = 'asc'; $output = executeQueryArray('member.getGroups', $args); $group_list = $output->data; - Rhymix\Framework\Cache::set("member:member_groups:site:$site_srl", $group_list); + Rhymix\Framework\Cache::set("member:member_groups:site:$site_srl", $group_list, 0, true); } if(!$group_list) diff --git a/modules/module/module.model.php b/modules/module/module.model.php index 26c90d27c..8dd4b0311 100644 --- a/modules/module/module.model.php +++ b/modules/module/module.model.php @@ -125,7 +125,7 @@ class moduleModel extends module $args->domain = $domain; $output = executeQuery('module.getSiteInfoByDomain', $args); $site_info = $output->data; - Rhymix\Framework\Cache::set('site_and_module:site_info:' . md5($domain), $site_info); + Rhymix\Framework\Cache::set('site_and_module:site_info:' . md5($domain), $site_info, 0, true); } if($site_info && $vid) @@ -177,7 +177,7 @@ class moduleModel extends module $output = executeQuery('module.getSiteInfo', $args); } $site_info = $output->data; - Rhymix\Framework\Cache::set('site_and_module:default_site', $site_info); + Rhymix\Framework\Cache::set('site_and_module:default_site', $site_info, 0, true); } } @@ -215,8 +215,8 @@ class moduleModel extends module $output = executeQuery('module.getMidInfo', $args); $module_info = $output->data; - Rhymix\Framework\Cache::set('site_and_module:module_srl:' . $mid . '_' . $site_srl, $module_info->module_srl); - Rhymix\Framework\Cache::set('site_and_module:mid_info:' . $module_info->module_srl, $module_info); + Rhymix\Framework\Cache::set('site_and_module:module_srl:' . $mid . '_' . $site_srl, $module_info->module_srl, 0, true); + Rhymix\Framework\Cache::set('site_and_module:mid_info:' . $module_info->module_srl, $module_info, 0, true); } $this->applyDefaultSkin($module_info); @@ -301,8 +301,8 @@ class moduleModel extends module if($mid_info === null) { - Rhymix\Framework\Cache::set('site_and_module:module_srl:' . $mid . '_' . $site_srl, $output->data->module_srl); - Rhymix\Framework\Cache::set('site_and_module:mid_info:' . $output->data->module_srl, $moduleInfo); + Rhymix\Framework\Cache::set('site_and_module:module_srl:' . $mid . '_' . $site_srl, $output->data->module_srl, 0, true); + Rhymix\Framework\Cache::set('site_and_module:mid_info:' . $output->data->module_srl, $moduleInfo, 0, true); } else { @@ -338,7 +338,7 @@ class moduleModel extends module if(!$output->toBool()) return; $mid_info = $output->data; $this->applyDefaultSkin($mid_info); - Rhymix\Framework\Cache::set("site_and_module:mid_info:$module_srl", $mid_info); + Rhymix\Framework\Cache::set("site_and_module:mid_info:$module_srl", $mid_info, 0, true); } if($mid_info && count($columnList)) @@ -464,7 +464,7 @@ class moduleModel extends module if(count($args) === 1 && isset($args->site_srl)) { - Rhymix\Framework\Cache::set('site_and_module:module:mid_list_' . $args->site_srl, $list); + Rhymix\Framework\Cache::set('site_and_module:module:mid_list_' . $args->site_srl, $list, 0, true); } } @@ -541,7 +541,7 @@ class moduleModel extends module $action_forward[$item->act] = $item; } - Rhymix\Framework\Cache::set('action_forward', $action_forward); + Rhymix\Framework\Cache::set('action_forward', $action_forward, 0, true); } if($action_forward[$act]) @@ -583,7 +583,7 @@ class moduleModel extends module $triggers = $output->data; if($output->toBool()) { - Rhymix\Framework\Cache::set('triggers', $triggers); + Rhymix\Framework\Cache::set('triggers', $triggers, 0, true); } } foreach($triggers as $item) @@ -1317,7 +1317,7 @@ class moduleModel extends module else $config = new stdClass; //insert in cache - Rhymix\Framework\Cache::set('site_and_module:module_config:' . $module . '_' . $site_srl, $config); + Rhymix\Framework\Cache::set('site_and_module:module_config:' . $module . '_' . $site_srl, $config, 0, true); $GLOBALS['__ModuleConfig__'][$site_srl][$module] = $config; } return $GLOBALS['__ModuleConfig__'][$site_srl][$module]; @@ -1345,7 +1345,7 @@ class moduleModel extends module else $config = null; //insert in cache - Rhymix\Framework\Cache::set('site_and_module:module_part_config:' . $module . '_' . $module_srl, $config === null ? 0 : $config); + Rhymix\Framework\Cache::set('site_and_module:module_part_config:' . $module . '_' . $module_srl, $config === null ? 0 : $config, 0, true); $GLOBALS['__ModulePartConfig__'][$module][$module_srl] = $config; } return $GLOBALS['__ModulePartConfig__'][$module][$module_srl]; @@ -1669,7 +1669,7 @@ class moduleModel extends module { foreach($get_module_srls as $module_srl) { - Rhymix\Framework\Cache::set("site_and_module:module_extra_vars:$module_srl", new stdClass); + Rhymix\Framework\Cache::set("site_and_module:module_extra_vars:$module_srl", new stdClass, 0, true); $extra_vars[$module_srl] = new stdClass; } } @@ -1683,7 +1683,7 @@ class moduleModel extends module } $extra_vars[$val->module_srl]->{$val->name} = $val->value; - Rhymix\Framework\Cache::set('site_and_module:module_extra_vars:' . $val->module_srl, $extra_vars[$val->module_srl]); + Rhymix\Framework\Cache::set('site_and_module:module_extra_vars:' . $val->module_srl, $extra_vars[$val->module_srl], 0, true); } } @@ -1709,7 +1709,7 @@ class moduleModel extends module $skin_vars[$vars->name] = $vars; } - Rhymix\Framework\Cache::set("site_and_module:module_skin_vars:$module_srl", $skin_vars, 0); + Rhymix\Framework\Cache::set("site_and_module:module_skin_vars:$module_srl", $skin_vars, 0, true); } return $skin_vars; @@ -1815,7 +1815,7 @@ class moduleModel extends module $skin_vars[$vars->name] = $vars; } - Rhymix\Framework\Cache::set("site_and_module:module_mobile_skin_vars:$module_srl", $skin_vars); + Rhymix\Framework\Cache::set("site_and_module:module_mobile_skin_vars:$module_srl", $skin_vars, 0, true); } return $skin_vars; @@ -1838,7 +1838,7 @@ class moduleModel extends module if(!$output->toBool()) return; $skin_vars = $output->data; - Rhymix\Framework\Cache::set('site_and_module:module_mobile_skin_vars:' . $module_info->module_srl, $skin_vars); + Rhymix\Framework\Cache::set('site_and_module:module_mobile_skin_vars:' . $module_info->module_srl, $skin_vars, 0, true); } if(!$skin_vars) return; diff --git a/modules/widget/widget.controller.php b/modules/widget/widget.controller.php index 310967bcf..7d07850cb 100644 --- a/modules/widget/widget.controller.php +++ b/modules/widget/widget.controller.php @@ -405,7 +405,7 @@ class widgetController extends widget $oModuleController = getController('module'); $oModuleController->replaceDefinedLangCode($widget_content); - Rhymix\Framework\Cache::set('widget_cache:' . $widget_sequence, $widget_content, $widget_cache); + Rhymix\Framework\Cache::set('widget_cache:' . $widget_sequence, $widget_content, $widget_cache, true); return $widget_content; }