`
cfw2005
  • 浏览: 16726 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

Memcached分布存储代码示例

    博客分类:
  • php
阅读更多
这一部分是一个实例,我现在正在用的一个扩展的 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();   
        }   
    }   
}   
?>  
分享到:
评论

相关推荐

    java连接memcached示例代码

    在上述代码中,我们首先创建了一个`MemcachedClient`实例,通过指定服务器地址和端口连接到Memcached服务。然后,我们使用`set`方法存储键值对,`get`方法获取数据,`delete`方法删除键。最后,记得在完成操作后关闭...

    memcached和activeMQ的JAVA示例代码

    标题"memcached和activeMQ的JAVA示例代码"表明这是一个关于使用Java编程语言实现的,针对memcached缓存系统和activeMQ消息中间件的示例项目。这通常是为了帮助开发者理解如何在实际应用中整合这两种技术。 描述中的...

    memcached缓存技术代码版

    这个“memcached缓存技术代码版”可能包含了使用Java语言在Eclipse开发环境中实现Memcached缓存功能的示例代码。在这里,我们将深入探讨Memcached的基本概念、工作原理以及如何在Java项目中集成和使用它。 1. **...

    Memcached在C#下的使用示例

    Memcached是一种高性能、分布式内存对象缓存系统,用于在分布式计算...以上是关于“Memcached在C#下的使用示例”的主要知识点。通过这些内容,开发者可以构建一个高效的分布式缓存系统,提升应用的运行效率和用户体验。

    c# asp.net memcached client 调用示例

    在C#代码中,可以创建一个`MemcachedClient`实例,并设置服务器的连接信息。例如: ```csharp var client = new MemcachedClient(); client.Connect("127.0.0.1", 11211); // 假设Memcached服务器运行在本地,端口...

    Centos6.5下安装Memcached完整示例

    总结来说,这个示例涵盖了在CentOS 6.5上从源码安装Memcached,配置开机启动,以及使用Java客户端与Memcached交互的关键步骤。通过这种方式,你可以充分利用Memcached的性能优势,提高你的Web应用的效率。记得在实际...

    MemCacheDManager

    MemCacheDManager、Memcached管理工具

    memcached+asp.net4.0

    通常,这样的演示会包含配置步骤、安装指南、代码示例以及可能的故障排查提示,帮助开发者快速理解和应用这个技术。 **标签解析:** "memcached asp.net" 标签进一步确认了我们关注的核心技术是将memcached与ASP...

    Memcached 简单示例

    这个示例可能包括初始化客户端、添加、获取、更新和删除缓存项的代码。通过查看和学习这个示例,你可以更好地理解如何在实际项目中运用Memcached提升效率。 总结来说,Memcached作为一个高效、轻量级的分布式缓存...

    memcached资源demo(已调试通过)

    **Memcached资源示例详解** Memcached是一款高性能、分布式内存对象缓存系统,它广泛应用于Web应用中,用于减轻数据库的负载,提升数据访问速度。本资源“memcached资源demo(已调试通过)”是一个经过实际测试和验证...

    Memcached的jar包

    然后,可以通过以下代码示例了解如何初始化客户端并进行操作: ```java import net.spy.memcached.*; public class MemcachedExample { public static void main(String[] args) { // 创建连接工厂 ...

    PHP MemCached 高级缓存应用代码

    #### 示例代码解析 ```php $memcache = new Memcache; $memcache-&gt;connect('127.0.0.1', 11211) or die("连接失败"); $memcache-&gt;set('name', 'John Doe', false, 3600); // 设置名为'name'的键值对,有效期为3600...

    缓存服务器memcached代码及使用文档

    **示例代码** ```java import net.spy.memcached.*; public class MemcachedExample { public static void main(String[] args) { // 初始化客户端 MemcachedClient memcachedClient = new MemcachedClient...

    php memcached缓存操作类

    Memcached是一种基于内存的键值存储系统,用于存储临时数据,以减轻数据库的压力。它将数据存储在内存中,读取速度快,但数据不持久化,一旦服务器重启,所有数据将丢失。Memcached采用分布式哈希的方式,可以跨越...

    memcached(十一)memcached-session-manager

    8. **示例和实践**:教程可能提供实际的代码示例和步骤,让读者能够跟随操作,以加深理解和应用。 9. **问题排查和常见错误**:教程可能会涵盖在集成和使用过程中可能遇到的问题,以及如何解决这些问题。 10. **...

    memcached 的简单java实例

    **Memcached简介** Memcached是一种高性能、分布式内存对象缓存系统,用于在Web应用程序中减少数据库负载,提高数据访问速度。...在压缩包文件"memcached-dome"中,可能包含了完整的Java代码示例,供你参考和学习。

    php7 的memcached扩展php_memcached.dll扩展

    此外,Memcached支持多台服务器集群,可实现数据的分布式存储,进一步提高系统的可扩展性和性能。 总之,`php_memcached.dll`是PHP7在Windows系统上使用Memcached扩展的关键组件。正确安装和配置此扩展,可以极大地...

    Memcached实例与文档

    压缩包中的文档可能包括了Memcached的官方文档、用户手册、教程、示例代码等,这些都是学习和解决Memcached使用过程中问题的宝贵资源。建议仔细阅读和实践,以便深入理解和掌握Memcached。 总之,Memcached作为一款...

    memcached数据完整迁移到redis

    标题 "memcached数据完整迁移到redis" 描述的是一个数据迁移的过程,从使用 memcached 存储的数据转换到使用 redis 存储。这个过程在 IT 领域中是常见的,因为不同的缓存系统有不同的特性和优势。让我们深入探讨这个...

    memcached-1.5.16.tar.gz

    总结,memcached-1.5.16作为一款强大的缓存工具,提供了高效、灵活的内存存储方案。正确地理解和运用它,能显著提升Web应用的性能,降低数据库压力。通过深入学习和实践,我们可以充分利用memcached的优势,为我们的...

Global site tag (gtag.js) - Google Analytics