memcached幫助文檔地址:http://us.php.net/manual/zh/book.memcached.php
Memcache 安裝:
Do not lose your time to install it on Ubuntu just trying "sudo apt-get install php5-memcached". There is something you need to do that sure installing memcached. Anyway...
Step 1.
$ sudo apt-get install memcached
Step 2.
$ sudo apt-get install php5-memcached
Step 3.
$ sudo /etc/init.d/apache2 restart
Ready!
What about some test?
<?php
error_reporting(E_ALL
& ~E_NOTICE);
$mc = new Memcached();
$mc->addServer("localhost",
11211);
$mc->set("foo",
"Hello!");
$mc->set("bar",
"Memcached...");
$arr = array(
$mc->get("foo"),
$mc->get("bar")
);
var_dump($arr);
?>
php實現:
1 用Memcached::OPT_DISTRIBUTION,Memcached::DISTRIBUTION_CONSISTENT
實例:
$memcache = new Memcached();
$memcache->setOption(Memcached::OPT_DISTRIBUTION,Memcached::DISTRIBUTION_CONSISTENT);
$memcache->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE,true);
$servers = array(
array('127.0.0.1', 11211, 33),
array('127.0.0.1', 11212, 67)
);
$memcache->addServers($servers);
$items = array(
'key1' => 'value1',
'key2' => 'value2',
'key3' => 'value3'
);
$memcache->setMulti($items);
$result = $memcache->getMulti(array('key1', 'key2', 'key3'), $cas);
var_dump($result, $cas);
2 修改memcached的配置
vim /etc/php5/cli/conf.d/memcached.ini
進行設置後爲:
; uncomment the next line to enable the module
extension=memcached.so
[memcached]
memcached.hash_strategy=consistent
memcached.hash_function=crc32
you can get the list of the possible options for the memcached.ini configuration file here:
https://github.com/php-memcached-dev/php-memcached/blob/master/memcached.ini
預定義常量:
下列常量由此擴展定義,且僅在此擴展編譯入 PHP 或在運行時動態載入時可用。
- Memcached::OPT_COMPRESSION
-
開啓或關閉壓縮功能。當開啓的時候,item的值超過某個閾值(當前是100bytes)時,會首先對值進行壓縮然後存儲,並 在獲取該值時進行解壓縮然後返回,使得壓縮對應用層透明。
類型: boolean, 默認: TRUE.
- Memcached::OPT_SERIALIZER
-
指定對於非標量值進行序列化的序列化工具。可用的值有Memcached::SERIALIZER_PHP 和Memcached::SERIALIZER_IGBINARY。後者僅在memcached配置時開啓 --enable-memcached-igbinary選項並且 igbinary擴展被加載時纔有效。
類型: integer, 默認: Memcached::SERIALIZER_PHP.
- Memcached::SERIALIZER_PHP
-
默認的PHP序列化工具(即serialize方法)。
- Memcached::SERIALIZER_IGBINARY
-
» igbinary序列化工具。它將php的數據結構 存儲爲緊密的二進制形式,在時間和空間上都有所改進。
- Memcached::SERIALIZER_JSON
-
JSON序列化,需要 PHP 5.2.10以上。
- Memcached::OPT_PREFIX_KEY
-
可以用於爲key創建“域”。這個值將會被作爲每個key的前綴,它不能長於128個字符, 並且將會縮短最大可允許的key的長度。這個前綴僅僅用於被存儲的元素的key,而不會用於服務器key。
類型: string, 默認: "".
- Memcached::OPT_HASH
-
指定存儲元素key使用的hash算法。可用的值是Memcached::HASH_*系列的常量。 每種hash算法都有它的優勢和劣勢,在你不瞭解或不確定哪種算法對你更有利時,請使用默認值。
類型: integer, 默認: Memcached::HASH_DEFAULT
- Memcached::HASH_DEFAULT
-
默認的(Jenkins one-at-a-time)元素key hash算法
- Memcached::HASH_MD5
-
md5元素key hash算法。
- Memcached::HASH_CRC
-
CRC元素key hash算法。
- Memcached::HASH_FNV1_64
-
FNV1_64元素key hash算法。
- Memcached::HASH_FNV1A_64
-
FNV1_64A元素key hash算法。
- Memcached::HASH_FNV1_32
-
FNV1_32元素key hash算法。
- Memcached::HASH_FNV1A_32
-
FNV1_32A元素key hash算法。
- Memcached::HASH_HSIEH
-
Hsieh元素key hash算法。
- Memcached::HASH_MURMUR
-
Murmur元素key hash算法。
- Memcached::OPT_DISTRIBUTION
-
指定元素key分佈到各個服務器的方法。當前支持的方法有餘數分步法合一致性hash算法兩種。一致性hash算法提供 了更好的分配策略並且在添加服務器到集羣時可以最小化緩存丟失。
類型: integer, 默認: Memcached::DISTRIBUTION_MODULA.
- Memcached::DISTRIBUTION_MODULA
-
餘數分佈算法。
- Memcached::DISTRIBUTION_CONSISTENT
-
一致性分佈算法(基於libketama).
- Memcached::OPT_LIBKETAMA_COMPATIBLE
-
開啓或關閉兼容的libketama類行爲。當開啓此選項後,元素key的hash算法將會被設置爲md5並且分佈算法將會 採用帶有權重的一致性hash分佈。這一點非常有用因爲其他基於libketama的客戶端(比如python,urby)在同樣 的服務端配置下可以透明的訪問key。
Note:
如果你要使用一致性hash算法強烈建議開啓此選項,並且這個選項可能在未來的發佈版中被設置爲默認開啓。
類型: boolean, 默認: FALSE.
- Memcached::OPT_BUFFER_WRITES
-
開啓或關閉I/O緩存。開啓I/O緩存會導致存儲命令不實際發送而是存儲到緩衝區中。任意的檢索數據操作都會導致 緩存中的數據被髮送到遠程服務端。退出連接或關閉連接也會導致緩存數據被髮送到遠程服務端。
類型: boolean, 默認: FALSE.
- Memcached::OPT_BINARY_PROTOCOL
-
開啓使用二進制協議。請注意這個選項不能在一個打開的連接上進行切換。
類型: boolean, 默認: FALSE.
- Memcached::OPT_NO_BLOCK
-
開啓或關閉異步I/O。這將使得存儲函數傳輸速度最大化。
類型: boolean, 默認: FALSE.
- Memcached::OPT_TCP_NODELAY
-
開啓或關閉已連接socket的無延遲特性(在某些幻境可能會帶來速度上的提升)。
類型: boolean, 默認: FALSE.
- Memcached::OPT_SOCKET_SEND_SIZE
-
socket發送緩衝的最大值。
類型: integer, 默認: 根據不同的平臺/內核配置不同
- Memcached::OPT_SOCKET_RECV_SIZE
-
socket接收緩衝的最大值。
類型: integer, 默認: 根據不同的平臺/內核配置不同
- Memcached::OPT_CONNECT_TIMEOUT
-
在非阻塞模式下這裏設置的值就是socket連接的超時時間,單位是毫秒。
類型: integer, 默認: 1000.
- Memcached::OPT_RETRY_TIMEOUT
-
等待失敗的連接重試的時間,單位秒。
類型: integer, 默認: 0.
- Memcached::OPT_SEND_TIMEOUT
-
socket發送超時時間,單位毫秒。在這種情況下您不能使用非阻塞I/O,這將使得您仍然有數據會發送超時。
類型: integer, 默認: 0.
- Memcached::OPT_RECV_TIMEOUT
-
socket讀取超時時間,單位毫秒。在這種情況下您不能使用非阻塞I/O,這將使得您仍然有數據會讀取超時。
類型: integer, 默認: 0.
- Memcached::OPT_POLL_TIMEOUT
-
poll連接超時時間,單位毫秒。
類型: integer, 默認: 1000.
- Memcached::OPT_CACHE_LOOKUPS
-
開啓或禁用DNS查找緩存。
類型: boolean, 默認: FALSE.
- Memcached::OPT_SERVER_FAILURE_LIMIT
-
指定一個服務器連接的失敗重試次數限制。在達到此數量的失敗重連後此服務器將被從服務器池中移除。
類型: integer, 默認: 0.
- Memcached::HAVE_IGBINARY
-
指示是否支持igbinary的序列化。
類型: boolean.
- Memcached::HAVE_JSON
-
指示是否支持json的序列化。
類型: boolean.
- Memcached::GET_PRESERVE_ORDER
-
一個用於Memcached::getMulti()和 Memcached::getMultiByKey()的標記用以確保返回的key和請求的key順序保持一致。 不存在的key將會得到一個NULL值。
- Memcached::RES_SUCCESS
-
操作成功。
- Memcached::RES_FAILURE
-
某種方式的操作失敗。
- Memcached::RES_HOST_LOOKUP_FAILURE
-
DNS查找失敗。
- Memcached::RES_UNKNOWN_READ_FAILURE
-
讀取網絡數據失敗。
- Memcached::RES_PROTOCOL_ERROR
-
錯誤的memcached協議命令。
- Memcached::RES_CLIENT_ERROR
-
客戶端錯誤。
- Memcached::RES_SERVER_ERROR
-
服務端錯誤。
- Memcached::RES_WRITE_FAILURE
-
向網絡寫數據失敗。
- Memcached::RES_DATA_EXISTS
-
比較並交換值操作失敗(cas方法):嘗試向服務端存儲數據時由於自此連接最後一次取此key對應數據之後被改變導致失敗。
- Memcached::RES_NOTSTORED
-
元素沒有被存儲,但並不是因爲一個錯誤。這通常表明add(元素已存在)或replace(元素不存在)方式存儲數據失敗或者元素已經在一個刪除序列中(延時刪除)。
- Memcached::RES_NOTFOUND
-
元素未找到(通過get或cas操作時)。
- Memcached::RES_PARTIAL_READ
-
局部網絡數據讀錯誤。
- Memcached::RES_SOME_ERRORS
-
在多key獲取的時候發生錯誤。
- Memcached::RES_NO_SERVERS
-
服務器池空。
- Memcached::RES_END
-
結果集到結尾了。
- Memcached::RES_ERRNO
-
系統錯誤。
- Memcached::RES_BUFFERED
-
操作被緩存。
- Memcached::RES_TIMEOUT
-
操作超時。
- Memcached::RES_BAD_KEY_PROVIDED
-
提供了無效的key。
- Memcached::RES_CONNECTION_SOCKET_CREATE_FAILURE
-
創建網絡socket失敗。
- Memcached::RES_PAYLOAD_FAILURE
-
不能壓縮/解壓縮或序列化/反序列化值。