2 if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');
3 /*********************************************************************************
4 * SugarCRM is a customer relationship management program developed by
5 * SugarCRM, Inc. Copyright (C) 2004-2011 SugarCRM Inc.
7 * This program is free software; you can redistribute it and/or modify it under
8 * the terms of the GNU Affero General Public License version 3 as published by the
9 * Free Software Foundation with the addition of the following permission added
10 * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
11 * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
12 * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
14 * This program is distributed in the hope that it will be useful, but WITHOUT
15 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
16 * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
19 * You should have received a copy of the GNU Affero General Public License along with
20 * this program; if not, see http://www.gnu.org/licenses or write to the Free
21 * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
24 * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
25 * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
27 * The interactive user interfaces in modified source and object code versions
28 * of this program must display Appropriate Legal Notices, as required under
29 * Section 5 of the GNU Affero General Public License version 3.
31 * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
32 * these Appropriate Legal Notices must retain the display of the "Powered by
33 * SugarCRM" logo. If the display of the logo is not reasonably feasible for
34 * technical reasons, the Appropriate Legal Notices must display the words
35 * "Powered by SugarCRM".
36 ********************************************************************************/
39 class SugarCache_Memcache extends SugarCache_ExternalAbstract
41 var $_memcache = null;
43 'host' => 'localhost',
47 * Minimal data size to be compressed
50 protected $min_compress = 512;
52 function SugarCache_Memcache()
54 $config = SugarConfig::getInstance();
55 $this->_config['host'] = $config->get('external_cache.memcache.host', 'localhost');
56 $this->_config['port'] = $config->get('external_cache.memcache.port', 11211);
61 if (EXTERNAL_CACHE_DEBUG) {
62 SugarCache::log('initializing memcache');
64 $this->_memcache = new Memcache();
65 $status = @$this->_memcache->connect(
66 $this->_config['host'],
67 $this->_config['port']
70 if (EXTERNAL_CACHE_DEBUG) {
71 SugarCache::log('initialization of memcache failed', 'fail');
73 $this->initialized = false;
76 $config = SugarConfig::getInstance();
77 if($config->get('external_cache.memcache.disable_compression', false)) {
78 $this->_memcache->setCompressThreshold($config->get('external_cache.memcache.min_compression', $this->min_compress));
80 $this->_memcache->setCompressThreshold(0);
87 $value = parent::get($key);
88 if (!is_null($value)) {
91 if (EXTERNAL_CACHE_DEBUG) {
92 SugarCache::log('grabbing via Memcache::get(' . $this->_realKey($key) . ')');
94 return $this->_processGet(
96 $this->_memcache->get(
102 function set($key, $value)
104 parent::set($key, $value);
106 // caching is turned off
107 if(!$GLOBALS['external_cache_enabled']) {
111 $external_key = $this->_realKey($key);
112 if (EXTERNAL_CACHE_DEBUG) {
113 SugarCache::log("Step 3: Converting key ($key) to external key ($external_key)");
116 $this->_memcache->set($external_key, $value, 0, $this->timeout);
118 if (EXTERNAL_CACHE_DEBUG) {
119 SugarCache::log("Step 4: Added key to memcache cache {$external_key} with value ($value) to be stored for ".EXTERNAL_CACHE_INTERVAL_SECONDS." seconds");
123 function __unset($key)
125 parent::__unset($key);
126 $this->_memcache->delete($this->_realKey($key));