## 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 ...