`
zhengdl126
  • 浏览: 2539748 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

memcache运用代码

 
阅读更多

interface ICache {

    public function put($key,$var,$timeout=0);

    public function get($key);

    public function delete($key);

    public function close();

    public function open($params);

}









class FileCache{

   private $filecache_path;
  /**
     * 構造函數
     * @param String $file DbFlat文件名,不存在將創建
     * @param Int $mode DbFlat文件的讀寫模式
     * @param Int $perm DbFlat文件權限
     */
    function __construct($filePath){
        if(file_exists($filePath)){
            $this->filecache_path = $filePath;
        }else{
            $this->make_dir($filePath);
            $this->filecache_path = $filePath;
        }
    }
  
   /**
     * 存儲一個Key
     * @param String $key Key
     * @param String $val Value
     * @return Boolean
     */
    function store($key,$val){
         $files = $this->filecache_path."/{$key}_filecache";
         return file_put_contents($files, serialize($val));
    }
   
    /**
     * 獲得指定Key的值
     * @param String $key Key
     * @return String
     */
    public function fetch($key){
        $files = $this->filecache_path."/{$key}_filecache";
        if(file_exists($files)){
            $str = file_get_contents($files);
            if($str === false || $str === '') {
                return null;
            }
            else{
                 return unserialize($str);
            }
        }
    }
   
  /**
     * 刪除一個Key
     * @param String $key Key
     * @return Boolean
     */
    public function delete($key){
        $files = $this->filecache_path."/{$key}_filecache";
        if(file_exists($files)){
            unlink($files);
        }
    }
   
    /**
     * 刪除一個數組里的所以Key
     * @param Array $key_array
     * @return void
     */
    public function delete_array($key_array){
        foreach($key_array as $key){
            $this->delete($key);
        }
    }
   
    /**
     * 遞迴生成文件夾
     * @param str $path 文件夾path, 不是文件的path
     * @return mixed 成功時返回創建成功的path,失敗時返回false
     */
    public function make_dir($path)
    {
        if(! file_exists($path))
        {
            $this->make_dir(dirname($path));
            mkdir($path, 0777);
        }
        return realpath($path);
    }
}






require_once('ICache.iface.php');

class ApcCache implements ICache {
    public function put($key,$var,$timeout=0) {
        $succ = true;//apc_store($key,$var,$timeout);
        return $succ;
    }
   
    public function get($key) {
//echo "<hr>get==$key==from apc ==<hr>";
        //return apc_fetch($key);
        return '';
    }

    public function delete($key) {
        //return apc_delete($key);
        return '';
    }

    public function close() {    }

    public function open($params) {    }

}




require_once('ICache.iface.php');

class MemCached implements ICache {
    //实例化memcache对象
    public  $mc = null;
   
    /**
     * 构造实例化
     * $config_array:memcache服务器IP和端口
     *@return  obj
     */
    public function __construct($config_array){
        //服务器端调用方式
        $this->mc = new Memcache;
        //$mc->connect($memcache_url, 11212);   #[单一服务器可用]
        if (is_array($config_array)) {
            foreach ($config_array as $key=>$value){
                $this->mc->addServer($value['IP'], $value['port']);
            }
        }
        $this->mc->setCompressThreshold(10240, 0.2);

 

/*

 $this->mc->setCompressThreshold(10240, 0.2);  此函数在memcache2.0.0加入。
Memcache::setCompressThreshold()开启对于大值的自动压缩。 同样你也可以使用函数memcache_set_compress_threshold()。
参数一:控制多大值进行自动压缩的阈值。
参数二:指定经过压缩实际存储的值的压缩率,支持的值必须在0和1之间。默认值是0.2表示20%压缩率。

$memcache_obj = new Memcache;
$memcache_obj->addServer('memcache_host', 11211);
$memcache_obj->setCompressThreshold(20000, 0.2);

*/
    }
   
    /**
     * 值加入到memcache
     * $key:标识
     * $var:值
     * $timeout:失效时间 默认时间86400表示为一天时间。
     *@return  true or false
     */
    public function put($key,$var,$timeout=86400,$is_compress=0) {
        $succ = $this->mc->set($key,$var,$is_compress,$timeout);
        if($succ === false){
            //如果失败,休息一秒钟,则继续重写
            sleep(1);
            $succ = $this->mc->set($key,$var,$is_compress,$timeout);
            if($succ  === false ){
                log_error('set memache key failed!! key:'.$key.' value:'.serialize($var).' timeout:'.$timeout, __FILE__, __LINE__); 
            }
        }
        return $succ;
    }
   
    /**
     * 根据key值从memcache得到值
     * $key:标识
     *@return  string or array
     */
    public function get($key) {
        $result = $this->mc->get($key);
        if($result === false && (is_string($key) && strpos($key,'online') === false)){
            //log_error('get memache key ('.$key.') failed!!', __FILE__, __LINE__);
        }
        return $result;
    }
   
    /**
     * 根据key值从memcache删除值
     * $key:标识
     *@return  true or false
     */
    public function delete($key) {
        $succ = $this->mc->delete($key);
        if($succ === false){
            //如果失败,休息一秒钟,则继续删除
            sleep(1);
            $succ = $this->mc->delete($key);
            //if($succ === false){
            //    log_error('delete memache key('.$key.') failed!!',__FILE__,__LINE__);
            //}
        }
        return $succ;
    }

    /**
     * 关键memcache
     *@return  true or false
     */
    public function close(){
        return $this->mc->close();
    }
   
    public function open($params) {    }

}






require_once('ICache.iface.php');
require_once('LocalCache.class.php');

class CacheStore{
    private $_caches;
    private $_storeName;
    private $_defaultCache;
   
    public function setName($name){
        $this->_storeName = $name;
    }
   
    public function setCache(ICache $cache, $privilege=0){
        $this->_caches[$privilege] = $cache;
    }
   
    public function getCache($privilege=0){
        return $this->_caches[$privilege];   
    }

    public function init(){
        //if(!is_array($this->_caches)){
        $this->setCache(new LocalCache());
        //}
        ksort($this->_caches);
       
    }
   
    public function put($key, $value, $privilege=-1){
       
        if($privilege == 0){ //指定赋值给默认的
            $this->_caches[0]->put($this->_storeName . '_' . $key, $value);
        }else{
            foreach($this->_caches as $cache){
                $cache->put($this->_storeName . '_' . $key, $value);
            }
        }

    }
   
    public function get($key){
        $i = 0;
        foreach($this->_caches as $cache){
            $val = null;
            $val = $cache->get($this->_storeName . '_' . $key);
            if($val!=null){
                if($i > 0){
                    $this->put($key,$val,0);
                }
                return $val;
            }
            $i++;
        }
        return $val;
    }
}






$arr_server_memcache = array(
    array(
        'IP' => '192.168.101.73',
        'port' => '12000'
    ),
    array(
        'IP' => '192.168.101.74',
        'port' => '12000'
    ),
    array(
        'IP' => '192.168.101.75',
        'port' => '12000'
    ),
    array(
        'IP' => '192.168.101.76',
        'port' => '12000'
    ),
    array(
        'IP' => '192.168.101.77',
        'port' => '12000'
    )
);


require('pworks/util/cache/CacheStore.class.php');
require_once('pworks/util/cache/ApcCache.class.php');
require_once('pworks/util/cache/MemCache.class.php');


 $appCache = new CacheStore();
    $appCache->setName(MARKSIX_SYSTEM.'_mvc_app_obj');
    //$appCache->setCache(new ApcCache());
    //加入memcached缓存
    if (MEMCACHE) {
         $appCache->setCache(new MemCached($arr_server_memcache), 'mc');
    }
    $appCache->init();

 

 

 

 

 

 

/**
     * 得到memcache实例
     */
    function memc(){
        return FrontController::getCache('mc');
    }

 

 

    /**
     * 得到memcache里存放当前用户标识的key
     */
    function get_mem_key(){
        return COM_TYPE == 'f' ? get_online_member_key($_SESSION['memberId']) : get_online_user_key($_SESSION['userId']);
    }

    /**
     * 给memcache里存放当前用户标识的key赋值当前的session,EXPIRE_TIME默认为 10
     */
    function set_mem_key(){
        return memc()->put (get_mem_key(), get_new_session_id(get_session_id()), EXPIRE_TIME);
    }

 

 

 

分享到:
评论

相关推荐

    Memcache 监控工具 mctop.zip

    **Memcache监控工具mctop详解** 在IT行业中,内存缓存系统如Memcache是提升应用程序性能的关键组件。Memcache能够存储数据,减少对...通过对mctop的熟练运用,IT专业人员可以更好地管理和维护他们的Memcache服务。

    C# MemCache 监控管理工具

    《C# MemCache监控管理工具详解》 ...通过熟练掌握和运用此工具,开发者可以更好地优化应用性能,提升用户体验。对于那些使用C#和MemCache的开发团队来说,这是一个不可多得的资源,值得在日常工作中广泛采用。

    memcache,mencached,php5.3.8,redis2.4,sphinx-1.0.4.tgz

    PHP 5.3.8包含了许多改进和新特性,如命名空间、晚期静态绑定等,增强了代码的可读性和可维护性。在这个版本中,开发者可以利用其强大的功能和丰富的扩展库来构建复杂的Web应用。 **Redis 2.4** 是一个高性能的键值...

    php对memcache的扩展

    上述代码创建了一个Memcache对象,并连接到本地的默认端口11211。 2. **设置缓存**: ```php $value = 'Hello, Memcache!'; $memcache-&gt;set('key', $value, 0, 60); // key为键,value为值,0表示不启用压缩,...

    php_memcache-3.0.8-5.4-ts-vc9-x86

    php_memcache是PHP与Memcached服务之间的一个接口,允许PHP代码直接操作Memcached服务器上的数据。这个扩展提供了丰富的API,包括添加、获取、更新、删除缓存数据,以及进行多键操作等,极大地提升了PHP应用程序的...

    phpstudy php7.012 nts memcache.dll redis.dll扩展带说明

    在这个主题中,我们重点关注的是PHPStudy...正确安装并运用这两个扩展,可以使PHP应用在内存缓存和数据处理方面达到更高的效率。在使用过程中,确保系统满足必要的依赖条件,并遵循正确的配置步骤,是成功部署的关键。

    memcache使用方法

    标题“memcache使用方法”指出我们将探讨的是如何运用memcache这一内存对象缓存系统。Memcache是一种高性能的分布式内存缓存系统,常用于减轻数据库的负载,提升Web应用的性能。 描述中提到“讲述memcache在客户端...

    memcache 缓存 分布式

    安装Memcache相对简单,通常可以通过编译源代码或者使用包管理器(如apt-get或yum)进行安装。配置文件通常为`/etc/memcached.conf`,可以设置监听端口、最大内存使用量、超时时间等参数。 **三、Memcache的工作...

    Python memcache 上传数据

    一旦安装完成,我们就可以在Python代码中导入`memcache`模块。首先,我们需要创建一个连接到Memcached服务器的客户端实例,通常使用服务器的IP地址和端口号: ```python import memcache mc = memcache.Client(['...

    php_memcache

    然后,下载PHP Memcache扩展的源代码,通过`phpize`命令进行配置,`make`进行编译,最后将编译生成的模块添加到PHP.ini的`extension_dir`路径下,并在配置文件中启用扩展。 3. **Memcache的连接与操作** 连接...

    memcache的demo

    本项目提供了一个简单的 Memcached 示例,帮助开发者更好地理解和运用这一技术。 在深入讲解之前,我们需要了解几个关键概念: 1. **缓存**: 缓存是一种临时存储数据的技术,使得下次请求相同数据时可以更快地获取...

    memcache安装配置

    **Memcache 安装配置使用说明** 1. **简介** 1.1 文档目的 本文档旨在提供详尽的指南,帮助用户了解如何在他们的系统上安装、配置及使用Memcache,这是一...希望这份指南能帮助你在实际项目中有效地运用Memcache。

    修改ThinkPHP缓存为Memcache的方法

    在IT行业中,优化应用程序性能是至关重要的,而缓存机制是提升系统响应速度的一个关键手段。ThinkPHP,作为一款流行的PHP开发框架,提供了多种缓存方式,...理解并熟练运用这些知识,将有助于构建高效、稳定的应用。

    memcached 在ASP.NET网站下的应用实例代码(c#)

    **标题与描述解析** 标题"memcached 在ASP.NET网站下的应用实例代码(c#)"揭示了本次讨论的主题,即如何在ASP.NET环境中...开发者可以通过阅读和运行代码,理解memcached在实际项目中的运用,从而提升Web应用的性能。

    软件复用课程代码

    通过研究这些代码,学习者可以更直观地掌握这些技术的实践运用。 总的来说,这个软件复用课程覆盖了Java开发中的重要工具和概念,包括构建管理、运行时动态性、缓存优化等,这些都是提升软件开发效率和质量的基石。...

    memcache + tomcat + tengin所用到的jar包

    - **配置Memcached连接**:在Java代码中,需要初始化Memcached客户端,设置服务器地址、端口等信息。 - **使用缓存**:在业务逻辑中,根据需求使用Memcached API进行数据的存储和获取。 3. **Tengin的反向代理与...

    FreeMarkerPro入门例子

    FreeMarkerPro是一个基于FreeMarker模板语言的开源项目,主要用于网站开发中的动态内容生成。这个入门例子将引导我们深入了解如何利用...实际操作这些示例将帮助你更好地理解和运用这些技术,从而提升你的Web开发能力。

    php-memcached-demo.tar.gz

    在当今的Web开发中,高效的数据处理和快速的页面响应已经成为提升用户体验的关键因素。...本文将深入探讨这一技术的核心概念、安装过程以及...结合实际项目需求,灵活运用这些知识,将有效提升网站的响应速度和用户体验。

    Redis教程从基础到高级,图形和代码结合,方便理解。

    【Redis教程从基础到高级,图形和代码结合,方便理解】 Redis是一款高性能的键值对数据库,...同时,结合图形和代码的解释,可以帮助学习者更直观地掌握Redis的使用技巧,从而在实际项目中更好地运用这个强大的工具。

    Spring整合memcached完整项目代码

    **Spring 整合 Memcached 完整项目代码详解** 在现代Web开发中,缓存是提高应用程序性能的关键技术之一。...在"Spring整合memcached完整项目代码"中,你可以找到具体的实现细节,这将帮助你更好地理解和运用这些概念。

Global site tag (gtag.js) - Google Analytics