## MEMCACHED
- 官网地址:https://memcached.org/
- github : https://github.com/memcached/memcached
Memcached,经常会被称为 Memcache。它是一套开源的分布式(并非高可用)的高速缓存系统。由于在部分特性上的抛弃,例如缺乏认证以及安全管制,使 Memcached 更存粹,这样效率也会更高一点。太底层的东西,可能需要另外撰写一本书了,在这里我们只是讨论一些经典的应用
### PHP 和 MEMCACHED
首先,PHP 的 Memcached 套件,其实是分:
1. memcache 编译源码地址:https://pecl.php.net/package/memcache 最新稳定版本 2.2.7
2. memcached 编译源码地址:https://pecl.php.net/package/memcached 最新稳定版本 3.0.3
这两者的区别,用不太准确但是比较简单的归纳为:
- memcache独立用php实现,是老客户端,从我们实践中已发现有多个问题,而且功能少,属性也可设置的少。memcache是pecl扩展库版本
- 扩展基于 libmemcached 开发的,使用 libmemcached 库提供的 API 与 Memcached 服务进行交互,只支持面向对象的接口,2009年才实现,Memcached 扩展功能更加完善,支持的函数更多,比如支持批量操作,现在一般建议使用 Memcached 扩展。
根据上面的情况,推荐尽量使用memcached,不过也会出现一些很奇怪的Bug。
- 函数列表:http://php.net/manual/zh/book.memcache.php
- 函数列表:http://php.net/manual/zh/book.memcached.php
当然,这只是 PHP 的套件。他们都需要服务端的支持,也就是 Memcached。
### MEMCACHED 服务端
Memcached 服务端有很多安装方式,我本人比较推荐通过 Yum (或 apt-get)获得已编译好的二进制版本,或者通过 Docker 获得(Docker 地址:https://hub.docker.com/_/memcached/ )。
```bash
# 安装Memcached,也许不是最新的,但是基本就是一步搞定。
yum -y install memcached
# 验证安装,应该会输出一些帮助信息
memcached -h
# 配置Memcache
vi /etc/sysconfig/memcached
# 文件中内容如下
# PORT=”11211″ 端口
# USER=”root” 使用的用户名
# MAXCONN=”1024″ 同时最大连接数
# CACHESIZE=”64″ 使用的内存大小
# OPTIONS=”" 附加参数
# 启动memcached
/etc/rc.d/init.d/memcached start
# 查看memcache 状态,记得启动 memcached 服务。
memcached-tool [Memcache Server IP]:[Memcache Server Port] stats
```
### MEMCACHED 客户端
以 Memcached 的 PHP 服务器扩展为例(Memcache 的写法和 Memcached 并不太一样)
```php
<?php
$connect = new Memcached; //声明一个新的memcached链接
$connect->setOption(Memcached::OPT_COMPRESSION, false); //关闭压缩功能
$connect->setOption(Memcached::OPT_BINARY_PROTOCOL, true); //使用binary二进制协议
$connect->setOption(Memcached::OPT_TCP_NODELAY, true); //重要,php memcached有个bug,当get的值不存在,有固定40ms延迟,开启这个参数,可以避免这个bug
$connect->addServer('127.0.0.1', 11211); //添加OCS实例地址及端口号
# $connect->setSaslAuthData('aaaaaaaaaa', 'password'); //设置OCS帐号密码进行鉴权,如已开启免密码功能,则无需此步骤
$connect->set("hello", "world");
echo 'hello: ',$connect->get("hello");
$connect->quit();
?>
```
具体方法和定义,参考函数列表:http://php.net/manual/zh/book.memcached.php
to be continued ...