这一部分是一个实例,我现在正在用的一个扩展的 Memcache 类,叫 Memcachez,用于多 server 的目的而写,里面还添了点出于自己喜好而使用的风格。使用的方法是填装一个数组形式的 server 群,之后就可以基本照常 add/set/get 了。
<?PHP
$cfg["cache"] = array(
"192.168.0.8:11211",
"192.168.0.9:11211"
);
$oCache = new Memcachez($cfg["cache"]);
?>
类代码如下:
<?PHP
/*
* MemCacheZ
*
* 多台服务器时自动根据 key 的 crc32 值来选择相应服务器
*
* Zheng Kai 2007-04-29 18:28:10
*/
/*
method:
setCompress (boolean) 是否使用 gzip 压缩(add/set/replace)
setExpire (int) 设置过期时间
add
set
get
replace
increment
decrement
以上这些照常使用
不过注意 add/set/replace 这三个方法的原第三个参数(是否 zlib 压缩)已经省略,
由最后一次 setCompress 来决定;最后一个参数 iExpire 如果为空则沿用 setExpire
的设置,如果都不填,则缺省的默认时间为一小时
*/
class Memcachez {
protected $aLink = array();
protected $aServerList = array();
protected $iServerNumber = 3;
protected $iCompress = 0;
protected $iCompressNow = 0;
protected $iExpire = 3600;
protected $iExpireNow = 3600;
protected $iServerNow = -1;
function __construct($aServerList) {
$this->aServerList = array_values($aServerList);
$this->iServerNumber = count($aServerList);
}
public function setCompress($sSwitch = "") {
if (empty($sSwitch)||(strtolower($sSwitch) == "false")) {
$this->iCompress = 0;
} else {
$this->iCompress = MEMCACHE_COMPRESSED;
}
}
public function setExpire($iExpire) {
$iExpire = intval($iExpire);
if ($iExpire > 1) {
$this->iExpire = $iExpire;
}
}
// 选择 memcached server
protected function _selectServer($sKey, $bServerID = FALSE) {
if ($bServerID) {
$iServerID = intval($sKey);
} else {
$iServerID = sprintf("%u", crc32($sKey)) % $this->iServerNumber;
}
if (($this->iServerNow != $iServerID)&&(!array_key_exists($iServerID, $this->aLink))) {
$this->aLink[$iServerID] = new Memcache();
list($sHost, $iPort) = explode(":", $this->aServerList[$iServerID]);
$this->aLink[$iServerID]->connect($sHost, $iPort);
}
$this->iServerNow = $iServerID;
}
// 选择过期时间
protected function _selectExpire($iExpire) {
$this->iExpireNow = ($iExpire <= 0) ? $this->iExpire : $iExpire;
}
protected function _selectCompress($iCompress) {
$this->iExpireNow = ($iCompress <= 0) ? $this->iCompressNow : $iCompress;
}
// add
public function add($sKey, $sValue, $iExpire = 0, $iCompress = 0) {
$this->_selectServer($sKey);
$this->_selectExpire($iExpire);
$this->_selectCompress($iCompress);
return $this->aLink[$this->iServerNow]->add($sKey, $sValue, $this->iCompressNow, $this->iExpireNow);
}
// set
public function set($sKey, $sValue, $iExpire = 0, $iCompress = 0) {
$this->_selectServer($sKey);
$this->_selectExpire($iExpire);
$this->_selectCompress($iCompress);
return $this->aLink[$this->iServerNow]->set($sKey, $sValue, $this->iCompressNow, $this->iExpireNow);
}
// replace
public function replace($sKey, $sValue, $iExpire = 0, $iCompress = 0) {
$this->_selectServer($sKey);
$this->_selectExpire($iExpire);
$this->_selectCompress($iCompress);
return $this->aLink[$this->iServerNow]->replace($sKey, $sValue, $this->iCompressNow, $this->iExpireNow);
}
// get
public function get($sKey) {
$this->_selectServer($sKey);
return $this->aLink[$this->iServerNow]->get($sKey);
}
// delete
public function delete($sKey, $iTimeout = 0) {
$this->_selectServer($sKey);
return $this->aLink[$this->iServerNow]->delete($sKey, $iTimeout);
}
// increment
public function increment($sKey, $iValue) {
$this->_selectServer($sKey);
return $this->aLink[$this->iServerNow]->increment($sKey, $iValue);
}
// decrement
public function decrement($sKey, $iValue) {
$this->_selectServer($sKey);
return $this->aLink[$this->iServerNow]->decrement($sKey, $iValue);
}
// getStats
public function getStats() {
$aStats = array();
foreach ($this->aServerList as $iKey => $sValue) {
$this->_selectServer($iKey, TRUE);
$aStats[$sValue] = $this->aLink[$iKey]->getStats();
}
return $aStats;
}
// flush
public function flush() {
foreach ($this->aServerList as $iKey => $sValue) {
$this->_selectServer($iKey, TRUE);
$this->aLink[$iKey]->flush();
}
}
}
?>
分享到:
相关推荐
在上述代码中,我们首先创建了一个`MemcachedClient`实例,通过指定服务器地址和端口连接到Memcached服务。然后,我们使用`set`方法存储键值对,`get`方法获取数据,`delete`方法删除键。最后,记得在完成操作后关闭...
标题"memcached和activeMQ的JAVA示例代码"表明这是一个关于使用Java编程语言实现的,针对memcached缓存系统和activeMQ消息中间件的示例项目。这通常是为了帮助开发者理解如何在实际应用中整合这两种技术。 描述中的...
这个“memcached缓存技术代码版”可能包含了使用Java语言在Eclipse开发环境中实现Memcached缓存功能的示例代码。在这里,我们将深入探讨Memcached的基本概念、工作原理以及如何在Java项目中集成和使用它。 1. **...
Memcached是一种高性能、分布式内存对象缓存系统,用于在分布式计算...以上是关于“Memcached在C#下的使用示例”的主要知识点。通过这些内容,开发者可以构建一个高效的分布式缓存系统,提升应用的运行效率和用户体验。
在C#代码中,可以创建一个`MemcachedClient`实例,并设置服务器的连接信息。例如: ```csharp var client = new MemcachedClient(); client.Connect("127.0.0.1", 11211); // 假设Memcached服务器运行在本地,端口...
总结来说,这个示例涵盖了在CentOS 6.5上从源码安装Memcached,配置开机启动,以及使用Java客户端与Memcached交互的关键步骤。通过这种方式,你可以充分利用Memcached的性能优势,提高你的Web应用的效率。记得在实际...
MemCacheDManager、Memcached管理工具
通常,这样的演示会包含配置步骤、安装指南、代码示例以及可能的故障排查提示,帮助开发者快速理解和应用这个技术。 **标签解析:** "memcached asp.net" 标签进一步确认了我们关注的核心技术是将memcached与ASP...
这个示例可能包括初始化客户端、添加、获取、更新和删除缓存项的代码。通过查看和学习这个示例,你可以更好地理解如何在实际项目中运用Memcached提升效率。 总结来说,Memcached作为一个高效、轻量级的分布式缓存...
**Memcached资源示例详解** Memcached是一款高性能、分布式内存对象缓存系统,它广泛应用于Web应用中,用于减轻数据库的负载,提升数据访问速度。本资源“memcached资源demo(已调试通过)”是一个经过实际测试和验证...
然后,可以通过以下代码示例了解如何初始化客户端并进行操作: ```java import net.spy.memcached.*; public class MemcachedExample { public static void main(String[] args) { // 创建连接工厂 ...
#### 示例代码解析 ```php $memcache = new Memcache; $memcache->connect('127.0.0.1', 11211) or die("连接失败"); $memcache->set('name', 'John Doe', false, 3600); // 设置名为'name'的键值对,有效期为3600...
**示例代码** ```java import net.spy.memcached.*; public class MemcachedExample { public static void main(String[] args) { // 初始化客户端 MemcachedClient memcachedClient = new MemcachedClient...
Memcached是一种基于内存的键值存储系统,用于存储临时数据,以减轻数据库的压力。它将数据存储在内存中,读取速度快,但数据不持久化,一旦服务器重启,所有数据将丢失。Memcached采用分布式哈希的方式,可以跨越...
8. **示例和实践**:教程可能提供实际的代码示例和步骤,让读者能够跟随操作,以加深理解和应用。 9. **问题排查和常见错误**:教程可能会涵盖在集成和使用过程中可能遇到的问题,以及如何解决这些问题。 10. **...
**Memcached简介** Memcached是一种高性能、分布式内存对象缓存系统,用于在Web应用程序中减少数据库负载,提高数据访问速度。...在压缩包文件"memcached-dome"中,可能包含了完整的Java代码示例,供你参考和学习。
此外,Memcached支持多台服务器集群,可实现数据的分布式存储,进一步提高系统的可扩展性和性能。 总之,`php_memcached.dll`是PHP7在Windows系统上使用Memcached扩展的关键组件。正确安装和配置此扩展,可以极大地...
压缩包中的文档可能包括了Memcached的官方文档、用户手册、教程、示例代码等,这些都是学习和解决Memcached使用过程中问题的宝贵资源。建议仔细阅读和实践,以便深入理解和掌握Memcached。 总之,Memcached作为一款...
标题 "memcached数据完整迁移到redis" 描述的是一个数据迁移的过程,从使用 memcached 存储的数据转换到使用 redis 存储。这个过程在 IT 领域中是常见的,因为不同的缓存系统有不同的特性和优势。让我们深入探讨这个...
总结,memcached-1.5.16作为一款强大的缓存工具,提供了高效、灵活的内存存储方案。正确地理解和运用它,能显著提升Web应用的性能,降低数据库压力。通过深入学习和实践,我们可以充分利用memcached的优势,为我们的...