博客
关于我
php之memcache,memcached
阅读量:792 次
发布时间:2023-03-01

本文共 3701 字,大约阅读时间需要 12 分钟。

Memcache与Memcached在PHP中的应用

Memcache概述

Memcache是一种广泛使用的高性能缓存解决方案,旨在提高应用的性能和扩展性。通过Memcache,开发人员可以轻松实现数据存储和检索的高效管理。

Memcache基本配置

在PHP中使用Memcache,首先需要建立缓存服务器的连接。以下代码展示了基本的Memcache配置:

$memcache = new Memcache;$memcache_obj = $memcache->pconnect('memcache_host', 11211);// 检查Memcache版本if ($memcache->getVersion() === false) {    throw new Exception('Please, verify the Memcache configuration!');}// 连接到指定的Memcache服务器$memcache_obj->connect('memcache_host', 11211);

Memcache的核心操作

Memcache支持多种操作,包括添加、获取、设置、删除和获取统计信息等。以下展示了常用操作的示例:

// 添加缓存$memcache_obj->add('var_key', 'test variable', false, 30);// 获取缓存$var = $memcache_obj->get('some_key');// 设置缓存$memcache_obj->set('var_key', 'some really big variable', Memcache::COMPRESSION, 50);// 设置压缩阈值$memcache_obj->setCompressThreshold(20000, 0.2);

Memcache的高级功能

Memcache支持多种高级功能,例如动态调整服务器参数和缓存清除。以下代码展示了这些功能的使用:

// 删除缓存$memcache_obj->delete('key_to_delete');// 获取服务器状态echo $memcache->getServerStatus('memcache_host', 11211); // online:int(1); offline:int(0)// 获取详细统计信息$stats = $memcache_obj->getExtendedStats();// 添加新的Memcache服务器$memcache->addServer('memcache_host', 11211);// 调整服务器参数$memcache->setServerParams('memcache_host', 11211, 1, 15, true, '_callback_memcache_failure');

普通哈希分布与Memcached

普通哈希分布

普通哈希分布是一种简单的数据分配方法,通过计算键的哈希值来决定将数据存储在哪个服务器上。以下代码展示了哈希函数的实现及应用:

function myHash($key) {    $md5 = substr(md5($key), 0, 8);    $seed = 31;    $hash = 0;    for ($i = 0; $i < 8; $i++) {        $hash = $hash * $seed + ord($md5[$i]);        $i++;    }    return $hash & 0x7FFFFFFF;}
$servers = array(    array('192.168.1.1', '11212'),    array('192.168.40.131', '11211'),);$key = 'myKey';$value = 'myValue';$toServer = $servers[myHash($key) % 2];$memcached = new Memcached();$memcached->addServer($toServer[0], $toServer[1]);$memcached->set($key, $value);echo $memcached->get($key);

一致性哈希分布

一致性哈希分布是一种更复杂的数据分配方法,能够在服务器动态变化时,确保每个键始终找到最新的服务器。以下代码展示了FlexiHash类的实现及应用:

class FlexiHash {    private $aServers = array();    private $isSorted = FALSE;    function addServer($server) {        $hash = myHash($server);        if (!isset($this->aServers[$hash])) {            $this->aServers[$hash] = $server;        }        $this->isSorted = FALSE;        return true;    }    function removeServer($server) {        $hash = myHash($server);        if (isset($this->aServers[$hash])) {            unset($this->aServers[$hash]);        }        $this->isSorted = FALSE;        return true;    }    function lookup($key) {        $hash = myHash($key);        if (!$this->isSorted) {            krsort($this->aServers, SORT_NUMERIC);            $this->isSorted = TRUE;        }        foreach ($this->aServers as $pos => $server) {            if ($hash >= $pos) {                return $server;            }        }        return $this->aServers[count($this->aServers) - 1];    }}$oFlexiHash = new FlexiHash();$oFlexiHash->addServer('localhost');echo 'save key1 to ' . $oFlexiHash->lookup('key1');$oFlexiHash->addServer('www.moguwu.com');echo 'save key1 to ' . $oFlexiHash->lookup('key1');echo 'save key2 to ' . $oFlexiHash->lookup('www.moguwu.com');

PHP-Memcached的应用

在PHP中,Memcached是一个强大的工具,可以帮助开发人员轻松管理分布式缓存。以下是Memcached在PHP中的常见用法:

Memcached的基本操作

$mem = new Memcached();// 设置缓存$mem->set('key', 'value');// 获取缓存$mem->get('key');// 删除缓存$mem->delete('key');

使用setByKey和getKey

Memcached提供了setByKey和getKey方法,可以帮助开发人员将相关数据存储在同一服务器:

$mem->setByKey('key', 'value', 3600); // 设置缓存$mem->setByKey('key', 'value', 3600); // 更新缓存$mem->getByKey('key'); // 获取缓存

Memcached的优势

Memcached能够显著提升应用的性能,适用于需要高并发和高扩展性的场景。通过Memcache,开发人员可以减少数据库的负载,提高应用的响应速度。

结论

Memcache和Memcached是PHP开发中的重要工具,能够有效管理分布式缓存,提升应用性能。无论是普通哈希分布还是一致性哈希分布,Memcached都为开发人员提供了灵活的配置选项。通过合理使用Memcache,可以实现高可用性的缓存解决方案,满足现代应用的性能需求。

转载地址:http://qdtfk.baihongyu.com/

你可能感兴趣的文章
ReentrantLock的公平锁与非公平锁
查看>>
php mysql procedure获取多个结果集
查看>>
php mysql query 行数,PHP和MySQL:返回的行数
查看>>
php mysql session_php使用MySQL保存session会话
查看>>
PHP mysql_real_escape_string() 函数防SQL注入
查看>>
php mysql优化方法_MySQL优化常用方法
查看>>
PHP OAuth 2.0 Server
查看>>
php odbc驱动,php常用ODBC函数集(详细)
查看>>
php openssl aes ecb,php openssl_encrypt AES-128-ECB iOS
查看>>
php paypal rest api,PayPal REST API指定网络配置文件PHP
查看>>
php pcntl 多进程学习
查看>>
PHP pcntl_fork不能在web服务器中使用的变通方法
查看>>
php private ,public protected三者的区别
查看>>
php PSR规范
查看>>
php rand() 重复,array_rand()函数从另外一个数组中随机取得的一定数量的数组的元素是否会重复?...
查看>>
php redis pub/sub(Publish/Subscribe,发布/订阅的信息系统)之基本使用
查看>>
php redis 集群扩展类文件
查看>>
php redis(2)
查看>>
PHP Redis分布式锁
查看>>
php redis的应用
查看>>