From 786163084bbc985c44d70de1faf2a0e366097eb1 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Thu, 21 Aug 2003 07:03:10 +0000 Subject: [PATCH] Update memcached client to 1.0.10 --- docs/memcached.doc | 20 ++++++--- docs/php-memcached/ChangeLog | 9 +++++ docs/php-memcached/Documentation | 3 +- includes/MemCachedClient.inc.php | 69 +++++++++++++++++++++++++------- 4 files changed, 79 insertions(+), 22 deletions(-) diff --git a/docs/memcached.doc b/docs/memcached.doc index c79865d6bb..85a74a0873 100644 --- a/docs/memcached.doc +++ b/docs/memcached.doc @@ -72,7 +72,7 @@ usage evenly), make its entry a subarray: == PHP client for memcached == -As of this writing, MediaWiki includes version 1.0.8 of the PHP +As of this writing, MediaWiki includes version 1.0.10 of the PHP memcached client by Ryan Gilfether . You'll find some documentation for it in the 'php-memcached' subdirectory under the present one. @@ -88,15 +88,23 @@ disable itself fairly smoothly. == Keys used == User: - key: $wgDBname:user:user_id:$sId - ex: wikidb:user:user_id:51 + key: $wgDBname:user:id:$sId + ex: wikidb:user:id:51 stores: instance of class User set in: User::loadFromSession() - cleared by: User::saveSettings() + cleared by: User::saveSettings(), UserTalkUpdate::doUpdate() + +Newtalk: + key: $wgDBname:newtalk:ip:$ip + ex: wikidb:newtalk:ip:123.45.67.89 + stores: integer, 0 or 1 + set in: User::loadFromDatabase() + cleared by: User::saveSettings() # ? + expiry set to 30 minutes LinkCache: - key: $wgDBname:linkcache:title:$title - ex: wikidb:linkcache:title:Wikipedia:Welcome,_Newcomers! + key: $wgDBname:lc:title:$title + ex: wikidb:lc:title:Wikipedia:Welcome,_Newcomers! stores: cur_id of page, or 0 if page does not exist set in: LinkCache::addLink() cleared by: LinkCache::clearBadLink() diff --git a/docs/php-memcached/ChangeLog b/docs/php-memcached/ChangeLog index bfabb494f3..86792f607e 100644 --- a/docs/php-memcached/ChangeLog +++ b/docs/php-memcached/ChangeLog @@ -1,3 +1,12 @@ +Release 1.0.10 +-------------- +* bug fix: changes hashing function to crc32, sprintf %u +* feature: optional compression + +Release 1.0.9 +------------- +* protocol parsing bug + Release 1.0.8 ------------- * whitespace/punctuation/wording cleanups diff --git a/docs/php-memcached/Documentation b/docs/php-memcached/Documentation index 0d09d17860..4782807b68 100644 --- a/docs/php-memcached/Documentation +++ b/docs/php-memcached/Documentation @@ -158,7 +158,8 @@ MC_ERR_LOADITEM_END // _load_items failed to receive END response MC_ERR_LOADITEM_BYTES // _load_items bytes read larger than bytes available MC_ERR_GET // failed to get value associated with key - +// Turns compression on or off; 0=off, 1=on +MemCacheClient::set_compression($setting) EXAMPLE: * @package MemCachedClient * @access public - * @version 1.0.7 + * @version 1.0.10 */ class MemCachedClient { @@ -90,6 +90,22 @@ class MemCachedClient * @var string */ var $errstr; + /** + * size of val to force compression; 0 turns off; defaults 1 + * @ var int + */ + var $compress = 1; + /** + * temp flag to turn compression on/off; defaults on + * @ var int + */ + var $comp_active = 1; + + /** + * array that contains parsed out buckets + * @ var array + */ + var $bucket; /** @@ -116,6 +132,7 @@ class MemCachedClient { $this->set_servers($options["servers"]); $this->debug = $options["debug"]; + $this->compress = $options["compress"]; $this->cache_sock = array(); } @@ -550,6 +567,23 @@ class MemCachedClient } + /** + * temporarily sets compression on or off + * turning it off, and then back on will result in the compression threshold going + * back to the original setting from $options + * @param int $setting setting of compression (0=off|1=on) + */ + + function set_compression($setting=1) { + if ($setting != 0) { + $this->comp_active = 1; + } else { + $this->comp_active = 0; + } + } + + + /* * PRIVATE FUNCTIONS */ @@ -637,8 +671,6 @@ class MemCachedClient */ function get_sock($key) { - $buckets = 0; - if(!$this->active) { $this->errno = MC_ERR_NOT_ACTIVE; @@ -652,9 +684,9 @@ class MemCachedClient $hv = is_array($key) ? intval($key[0]) : $this->_hashfunc($key); - if(!$buckets) + if(!$this->buckets) { - $bu = $buckets = array(); + $bu = $this->buckets = array(); foreach($this->servers as $v) { @@ -667,14 +699,14 @@ class MemCachedClient $bu[] = $v; } - $buckets = $bu; + $this->buckets = $bu; } $real_key = is_array($key) ? $key[1] : $key; $tries = 0; while($tries < 20) { - $host = @$buckets[$hv % count($buckets)]; + $host = @$this->buckets[$hv % count($this->buckets)]; $sock = $this->sock_to_host($host); if(is_resource($sock)) @@ -783,7 +815,6 @@ class MemCachedClient return trim($retval); } - /** * sends the command to the server * Possible errors set are: @@ -837,6 +868,17 @@ class MemCachedClient $flags |= 1; } + if (($this->compress_active) && ($this->compress > 0) && (strlen($val) > $this->compress)) { + $this->_debug("_set(): compressing data. size in:".strlen($val)); + $cval=gzcompress($val); + $this->_debug("_set(): done compressing data. size out:".strlen($cval)); + if ((strlen($cval) < strlen($val)) && (strlen($val) - strlen($cval) > 2048)){ + $flags |= 2; + $val=$cval; + } + unset($cval); + } + $len = strlen($val); if (!is_int($exptime)) $exptime = 0; @@ -1034,6 +1076,8 @@ class MemCachedClient if(strlen($val[$sk]) != $len_array[$sk]) continue; + if(@$flags_array[$sk] & 2) + $val[$sk] = gzuncompress($val[$sk]); if(@$flags_array[$sk] & 1) $val[$sk] = unserialize($val[$sk]); @@ -1078,12 +1122,7 @@ class MemCachedClient */ function _hashfunc($num) { - $hash = 0; - - foreach(preg_split('//', $num, -1, PREG_SPLIT_NO_EMPTY) as $v) - { - $hash = $hash * 33 + ord($v); - } + $hash = sprintf("%u",crc32($num)); return $hash; } -- 2.20.1