多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
### **1. memcache的特征** 1. 协议简单,使用简单的基于文本行的协议 2. 基于libevent事件处理,灵活调整服务器连接数 3. 内存存储,存读速度快 4. 不互相通信的分布式,每个服务器只对自己的数据进行管理 5. 缺乏认证及安全管理 ### **2.Memcacehd的简单使用** **连接:**` $m->addServer('127.0.0.1',11211); ` #### 2.1 写入: * **存储:** ` $m->set('key','value','expire_time'); ` * **不存在则存储:** ` $m->add('key','value','expire_time'); ` * **存在则替换:** ` $m->replace('key','value','expire_time'); ` * **已存在键后面追加数据:** ` $m->append('key','value'); ` * **已存在键前面追加数据:** ` $m->prepend('key','value'); ` * **最后一次取值后未修改再写入:** ` $m->cas('cas_token','key','value'); ` #### 2.2 取值与删除 * **取值:** ` $m->get('key'); ` * **获取带有CAS令牌的值:** ` $m->get('key',$cas); ` * **删除:** ` $m->delete('key'); ` #### 2.3 其他 * **数字值自增(通常用于统计访问量)** ` $m->increment('key','number'); ` * **数字值自减** ` $m->decrement('key','number'); ` * **统计信息(Memcache 运行状态和信息)** ` $m->getStats() ` ### **3. 编写自己的Memcached类** #### **1.编写缓存类** ``` class Memcached { private static $handle = null; /**初始化 * @return Memcached|null */ public static function init() { $option = array( 'host' => Config::get('cache.MEMCACHED_HOST','127.0.0.1'), 'port' => Config::get('cache.MEMCACHED_PORT','11211') ); if (!self::$handle) { self::$handle = new \Memcached(); self::$handle->addServer($option['host'],$option['port']); } return self::$handle; } /**存储 * @param $key * @param $value * @param $expire * @return false */ public static function set($key,$value,$expire) { if (!self::init()) { return false; } $res = self::init()->set($key,$value,$expire); return $res; } /**获取 * @param $key * @return mixed */ public static function get($key) { $func = is_array($key) ? 'getMulti':'get'; return self::init()->{$func}($key); } /** * 递增 * @param $key */ public static function incr($key) { if (!self::init()) { return false; } self::init()->add($key,0); return self::init()->increment($key); } } ``` #### **2.使用**: ``` // 测试 memcached \Driver\Cache\Memcached::set('user','李四',600); echo \Driver\Cache\Memcached::get('user'); ``` ### **4.使用Memcached实现分布式算法** * 服务器端互不通讯 * 由于程序实现分布式 * 考虑算法分散存储压力 * 考虑算法的命中率 ### **5.Session共享机制** **缺点**:集群错误会导致用户无法登录,回收机制导致用户掉线 #### 步骤: 编辑php.ini `session.save_handleer = "memcached"` `session.save_path = "192.168.1.12:11211"` ### **6.memcache和memcached的区别** * Memcache 基于pecl扩展库版本 ``` $cache = new memcache(); $cache->connect('127.0.0.1','11211'); $cache->set('memcache_key','value'); echo $cache->get('memcache_key'); ``` * Memcached 基于libmemcached版本 ``` $cached = new memcached(); $cached->addServer('127.0.0.1','11211'); $cached->set('memcached_key','value'); echo $cached->get('memcached_key'); ```