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