### **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');
```