memcache 操作类

<?php

/**
 * memcache 操作实现
 * @author timeless
 */
class Memcache_manage {

    //CI原始的信息
    private $_ci;
    private $_memcache_prefix;
    private $host;
    private $port;
    private $expire;
    private $weight;

    /**
     * 读取配置文件信息然后更新
     * @access public
     */
    public function memcache($flag = ‘default‘) {
        //要你自定义的类库中访问CodeIgniter的原始资源,你必须使用 get_instance() 函数.这个函数返回一个CodeIgniter super object.
        $this->_ci = &get_instance();
        //记载memcache 缓存配置     //memcached 中的数据     

/* memcahed.php 文件中的配置信息  CI框架中
$config = array(
    //现在是单独的memcache 服务器  以后可以添加多个  只需要 mem 对象添加 addserver
    ‘default‘ => array(
        ‘hostname‘ => ‘127.0.0.1‘,
        ‘port‘ => ‘11211‘,
        ‘weight‘ => ‘1‘,
        //100分钟
        ‘expire‘ => ‘6000‘,
        ‘memcache_prefix‘=>‘‘,
    ),
);
     */
        $this->_ci->config->load(‘memcached‘, FALSE, TRUE);
        //获取配置文件
        $default_conf = $this->_ci->config->item(‘default‘);
        $this->host = $default_conf[‘hostname‘];
        $this->port = $default_conf[‘port‘];
        $this->expire = $default_conf[‘expire‘];
        $this->weight = $default_conf[‘weight‘];
        $this->_memcache_prefix = $default_conf[‘memcache_prefix‘];
        $this->connected_server = array();
        $this->_connect();
    }

    /**
     * 连接memcache 数据库
     * @access private
     */
    private function _connect() {
        if (function_exists(‘memcache_connect‘)) {
            $this->cache = new Memcache;
            $this->_connect_memcached();
        }
    }

    /**
     * 添加memcache 服务器
     * @access private
     */
    private function _connect_memcached() {
        $error_display = ini_get(‘display_errors‘);
        $error_reporting = ini_get(‘error_reporting‘);
        if ($this->cache->addServer($this->host, $this->port, TRUE, $this->weight)) {
            $this->connected_server[] = $this->host;
        }
        ini_set(‘error_reporting‘, $error_reporting);
    }

    public function get($key) {
        if (empty($this->connected_server)) {
            return false;
        }
        return $this->cache->get($this->key_name($key));
    }

    public function set($key, $data) {
        if (empty($this->connected_server)) {
            return false;
        }
        return $this->cache->set($this->key_name($key), $data, 0, $this->expire);
    }

    public function set_expire($key, $data, $expire) {
        if (empty($this->connected_server)) {
            return false;
        }
        return $this->cache->set($this->key_name($key), $data, 0, $expire);
    }

    public function replace($key, $data) {
        if (empty($this->connected_server)) {
            return false;
        }
        return $this->cache->replace($this->key_name($key), $data, 0, $this->expire);
    }

    public function delete($key, $when = 0) {
        if (empty($this->connected_server)) {
            return false;
        }
        return $this->cache->delete($this->key_name($key), $when);
    }

    public function flush() {
        return $this->cache->flush();
    }

    /**
     * @Name: 生成md5加密后的唯一键值
     * @param:$key key
     * @return : md5 string
     * */
    private function key_name($key) {
        return md5(strtolower($this->_memcache_prefix . $key));
    }

}
时间: 2024-11-14 11:27:29

memcache 操作类的相关文章

PHP 对 memcache操作类

<span style="font-size:18px;">class myMemcache { private $memcache; /** * 一般建议这2个值做成常量的形式 */ public function __construct($host = '192.102.1.8', $port = 6379) { $this->memcache = new Memcache(); $this->memcache->connect($host, $por

设计模式之PHP项目应用——单例模式设计Memcache和Redis操作类

1 单例模式简单介绍 单例模式是一种经常使用的软件设计模式. 在它的核心结构中仅仅包括一个被称为单例类的特殊类. 通过单例模式能够保证系统中一个类仅仅有一个实例并且该实例易于外界訪问.从而方便对实例个数的控制并节约系统资源.假设希望在系统中某个类的对象仅仅能存在一个.单例模式是最好的解决方式. 2 模式核心思想 1)某个类仅仅能有一个实例: 2)它必须自行创建这个实例: 3)它必须自行向整个系统提供这个实例. 3 模式架构图 4 项目应用 4.1 需求说明 CleverCode在实际的PHP项目

ecshop的Mysql操作类

摘要,这是直接摘抄的ecshop的mysql操作类:不过他这里的缓存是用的文件缓存,我们如果想直接使用,可以替换成memcache的或者redis的! <?php /** * ECSHOP MYSQL 公用类库 * ============================================================================ * * 版权所有 2005-2012 上海商派网络科技有限公司,并保留所有权利. * 网站地址: http://www.ecsho

ASP.net如何保证EF操作类线程内唯一

说到线程内唯一,肯定会想到单例模式,但是如果多用户访问网站就会出现问题.ASP.net中有两种方法可以保证EF操作类线程内唯一(目前只会这两种,以后有好的方法再添加): 1.httpcontext(实现原理也是通过数据槽callcontext) 将EF操作类通过键值对方法保存在HttpContext.Current.Items["key"],封装成方法直接调用 2.callcontext public static DbContext CreateDbContext() { DbCon

反射之操作类,方法,属性等

1.操作类 获取类,并通过反射获取一个实例对象 Class class1 = Student.class; Student student = (Student)class1.newInstance();   //默认调用无参数的构造方法 student.setName("heh"); System.out.println(student.getName()); 2.操作构造方法   获取指定参数类型的构造方法,通过此对象创建一个特定参数值的实例对象 Class class1 = St

Android打造属于自己的数据库操作类。

1.概述 开发Android的同学都知道sdk已经为我们提供了一个SQLiteOpenHelper类来创建和管理SQLite数据库,通过写一个子类去继承它,就可以方便的创建.管理数据库.但是当我们需要去做增删改查的操作的时候,就得通过getWritableDatabase获取一个SQLiteDataBase然后老老实实去写操作值的put以及查询返回的Cursor处理,其实我们可以搞一个对象来帮我们干这些事情,打造属于你自己的数据库操作类. 2.操作类的初显形 假设现在我们什么都没有,我们要去搞一

使用RedisTemplate的操作类访问Redis(转载)

原文地址:http://www.cnblogs.com/luochengqiuse/p/4641256.html private ValueOperations<K, V> valueOps; private ListOperations<K, V> listOps; private SetOperations<K, V> setOps; private ZSetOperations<K, V> zSetOps; 1. RedisOperations接口说明

php 的mysql操作类

亲自测试,网上其他版本没法用,有很多错误,这是本人亲自测试用的,绝对增删改查都可以. <?php /** * Created by Netbeans. * User: Lugo * Date: 16-7-14 * Version: 1.0.0 * Time: 上午10:50 */ class MysqlHelper { const HOST="localhost"; const DATABASE = "demo"; const ENCODING = "

数字(数学)操作类 Math Random 类 ,大数字操作类

Math 提供了大量的数学操作方法 Math类中所有的方法都是static 方法 重点看这个操作,四舍五入 System.out.println(Math.round(-16.5)) ; -16 System.out.println(Math.round(16.5)) ; 17 大于等于0.5进位. Random类 取得随机数的类 java.util 包 产生100之内的随机整数 Random rand = new Random() ; for(int x = 0 ; x < 10 ; x ++