Memcached緩存系統(tǒng)的介紹、安裝以及應(yīng)用方法詳解
本文實(shí)例講述了Memcached緩存系統(tǒng)的介紹、安裝以及應(yīng)用方法。分享給大家供大家參考,具體如下:
一. memcached 是什么?
memcached is a high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load.
memcached是一個(gè)高性能的、分布式內(nèi)存對(duì)象緩存系統(tǒng),應(yīng)用廣泛。 通過(guò)緩存數(shù)據(jù)庫(kù)查詢結(jié)果,減少數(shù)據(jù)庫(kù)訪問(wèn)次數(shù),以提高動(dòng)態(tài)Web應(yīng)用的速度、 提高可擴(kuò)展性。
它可以應(yīng)對(duì)任意多個(gè)連接,使用非阻塞的網(wǎng)絡(luò)IO。由于它的工作機(jī)制是在內(nèi)存中開辟一塊空間,然后建立一個(gè)HashTable,Memcached自管理這些HashTable。還使用內(nèi)置的內(nèi)存塊分配和哈希表算法,確保虛擬內(nèi)存不會(huì)過(guò)來(lái)?yè)v亂。
Memcached 官方網(wǎng)站:http://www.danga.com/memcached
二. memcached 的安裝:
注:memcached 用到了libevent這個(gè)庫(kù)用于Socket的處理,所以還需要安裝libevent.官網(wǎng):http://www.monkey.org/~provos/libevent/
1. 先安裝libevent:
[root@localhost software]# tar zxvf libevent-1.4.11-stable.tar.gz [root@localhost libevent-1.4.11-stable]# ./configure –prefix=/usr [root@localhost libevent-1.4.11-stable]# make [root@localhost libevent-1.4.11-stable]# make install
2. 測(cè)試libevent是否安裝成功
[root@localhost libevent-1.4.11-stable]# ls -al /usr/lib | grep libevent lrwxrwxrwx 1 root root 22 07-10 13:10 libevent-1.1a.so.1 -> libevent-1.1a.so.1.0.2 -rwxr-xr-x 1 root root 31596 2007-01-07 libevent-1.1a.so.1.0.2 lrwxrwxrwx 1 root root 21 07-21 03:33 libevent-1.4.so.2 -> libevent-1.4.so.2.1.3 -rwxr-xr-x 1 root root 308088 07-21 03:33 libevent-1.4.so.2.1.3 -rw-r--r-- 1 root root 394474 07-21 03:33 libevent.a lrwxrwxrwx 1 root root 26 07-21 03:33 libevent_core-1.4.so.2 -> libevent_core-1.4.so.2.1.3 -rwxr-xr-x 1 root root 109490 07-21 03:33 libevent_core-1.4.so.2.1.3 -rw-r--r-- 1 root root 148742 07-21 03:33 libevent_core.a -rwxr-xr-x 1 root root 866 07-21 03:33 libevent_core.la lrwxrwxrwx 1 root root 26 07-21 03:33 libevent_core.so -> libevent_core-1.4.so.2.1.3 lrwxrwxrwx 1 root root 27 07-21 03:33 libevent_extra-1.4.so.2 -> libevent_extra-1.4.so.2.1.3 -rwxr-xr-x 1 root root 246870 07-21 03:33 libevent_extra-1.4.so.2.1.3 -rw-r--r-- 1 root root 307370 07-21 03:33 libevent_extra.a -rwxr-xr-x 1 root root 873 07-21 03:33 libevent_extra.la lrwxrwxrwx 1 root root 27 07-21 03:33 libevent_extra.so -> libevent_extra-1.4.so.2.1.3 -rwxr-xr-x 1 root root 831 07-21 03:33 libevent.la lrwxrwxrwx 1 root root 21 07-21 03:33 libevent.so -> libevent-1.4.so.2.1.3
安裝OK。
3. 安裝memcached,同時(shí)需要安裝中指定libevent的安裝位置
[root@localhost software]# tar zxvf memcached-1.4.0.tar.gz [root@localhost memcached-1.4.0]# ./configure –with-libevent=/usr [root@localhost memcached-1.4.0]# make [root@localhost memcached-1.4.0]# make intall
4. 測(cè)試是否成功安裝memcached
[root@localhost memcached-1.4.0]# ls -al /usr/local/bin | grep memcached -rwxr-xr-x 1 root root 188225 07-21 03:35 memcached
安裝OK。
三. 如何啟動(dòng) memcached 服務(wù):
只需要啟動(dòng)一個(gè) memcached 監(jiān)護(hù)進(jìn)程,監(jiān)護(hù)進(jìn)程不需要配置文件,只要在命令行里面加三四個(gè)參數(shù)就可以了:
-d: (run as a daemon) 選項(xiàng)是啟動(dòng)一個(gè)守護(hù)進(jìn)程
-m:(max memory to use for items in megabytes (default: 64 MB))是分配給Memcache使用的內(nèi)存數(shù)量,單位是MB,我這里是100MB,
-u:(assume identity of <username> (only when run as root))是運(yùn)行Memcache的用戶,我這里是root,
-l:(interface to listen on)是監(jiān)聽的服務(wù)器IP地址,如果有多個(gè)地址的話,這里指定了服務(wù)器的IP地址127.0.0.1,
-p:是設(shè)置Memcache監(jiān)聽的端口,這里設(shè)置了11211,最好是1024以上的端口,
-c:選項(xiàng)是最大運(yùn)行的并發(fā)連接數(shù),默認(rèn)是1024,這里設(shè)置了256,根據(jù)服務(wù)器的負(fù)載量來(lái)設(shè)定,
-P:(save PID in <file>, only used with -d option)是設(shè)置保存Memcache的pid文件,這里是保存在 /tmp/memcached.pid
注:也可以啟動(dòng)多個(gè)守護(hù)進(jìn)程,不過(guò)端口不能重復(fù)。
四. 安裝 Memcached 的PHP擴(kuò)展:
在PHP中使用Memcached,有兩種方式:
一種是安裝PHP的memcached擴(kuò)展。該擴(kuò)展是用c寫的,效率較高,需要在服務(wù)器上安裝。
另外一種則是直接使用客戶端的php-memcached-client類庫(kù)。
下面是使用PECL中Memcache的專用擴(kuò)展,因?yàn)楫吘故怯肅寫的,效率高,而且安裝部署起來(lái)也比較方便。
1. 在 http://pecl.php.net/package/memcache 選擇相應(yīng)想要下載的memcache版本。我下載的是:memcache-2.2.5.tgz 版本。
2. 安裝 memcache
[root@localhost software]# tar zxvf memcache-2.2.5.tgz [root@localhost software]# cd memcache-2.2.5 [root@localhost memcache-2.2.5]# /usr/bin/phpize [root@localhost memcache-2.2.5]# ./configure –enable-memcache –with-php-config=/usr/bin/php-config –with-zlib-dir [root@localhost memcache-2.2.5]# make [root@localhost memcache-2.2.5]# make install
這步會(huì)有類似這樣的提示:Installing shared extensions: /usr/local/php/modules
3. 把/etc/php.ini中的
extension_dir = "./"
修改為:
extension_dir = "/usr/lib/php/modules"
4. 并添加: extension=memcache.so
也可執(zhí)行以下shell命令,對(duì)php.ini文件的修改:
五. 安裝C/C++ Memcached客戶端庫(kù):libmemcached
下載:http://download.tangent.org/libmemcached-0.32.tar.gz
1. 安裝 libmemcached
[root@localhost src]# tar zxvf libmemcached-0.32.tar.gz [root@localhost src]# cd libmemcached-0.32 [root@localhost libmemcached-0.32]# ./configure --prefix=/usr [root@localhost libmemcached-0.32]# make && make install
2. 檢查安裝結(jié)果
[root@localhost src]# ls /usr/lib/libmemcache* //庫(kù)文件 [root@localhost src]# ls /usr/include/libmemcached/* //頭文件 [root@localhost src]# ls /usr/bin/mem* //命令行工具
六. 應(yīng)用:
1. 啟動(dòng) memcache 服務(wù)
2. 重啟 Web 服務(wù)器
[root@localhost bin]# service httpd restart
3. 創(chuàng)建 demo 測(cè)試程序
<?php
//連接
$mem = new Memcache;
$mem->connect("127.0.0.1", 11211);
echo 'Memcache Version is:'.$mem->getVersion().'<br/>';
//保存數(shù)據(jù)
$mem->set('key1', 'This is first memcache demo', 0, 60);
$val = $mem->get('key1');
echo "Get key1 value: ".$val."<br/>"
//關(guān)閉連接
$mem->close();
?>
4. Memcached客戶端與tokyotyrant DB操作訪問(wèn)
<?php
$memcache = new memcache();
$memcache->addServer('127.0.0.1:1978');
function microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
$time_start = microtime_float();
$data = 'abc123';
for($i = 0;$i <= 20000 ;$i++){
$key = (string) rand(1,100);
$memcache->set($key, $data);
}
for($i = 0;$i <= 20000 ;$i++){
$key = (string) rand(1,100);
echo $data = $memcache->get($key).'-'.$i.'<br/>';
}
$time_end = microtime_float();
$time = $time_end - $time_start;
echo $time;
$memcache->close();
?>
5. C/C++ 與 Memcached 結(jié)合代碼
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <libmemcached/memcached.h>
int main(int argc, char *argv[])
{
memcached_st *memc;
memcached_return rc;
memcached_server_st *servers;
char value[8191];
//連接服務(wù)器
memc = memcached_create(NULL);
servers = memcached_server_list_append(NULL, "127.0.0.1",11211, &rc);
rc = memcached_server_push(memc, servers);
memcached_server_free(servers);
//存儲(chǔ)數(shù)據(jù)
strcpy(value, "This is c first value");
rc = memcached_set(memc, "key1", 4, value, strlen(value),
(time_t)180, (uint32_t)0);
if (rc == MEMCACHED_SUCCESS) {
printf("Save key:key1 data:/"%s/" success./n", value);
}
//獲取數(shù)據(jù)
char return_key[MEMCACHED_MAX_KEY];
size_t return_key_length;
char *return_value;
size_t return_value_length;
char *keys[]= {"key1"};
size_t key_length[]= {4};
uint32_t flags;
rc = memcached_mget(memc, keys, key_length, 1);
return_value = memcached_fetch(memc, return_key,
&return_key_length, &return_value_length, &flags, &rc);
if (rc == MEMCACHED_SUCCESS) {
printf("Fetch key:%s data:%s/n", return_key, return_value);
}
//刪除數(shù)據(jù)
rc = memcached_delete(memc, "key1", 4, (time_t)0);
if (rc == MEMCACHED_SUCCESS) {
printf("Delete Key key1 success./n");
}
//釋放內(nèi)存
memcached_free(memc);
return 0;
}
編譯源代碼:
[root@localhost html]# gcc -o cmem cmem.c -lmemcached [root@localhost html]# ./cmem //執(zhí)行 Save key:key1 data:"This is c first value" success. Fetch key:key1 data:This is c first value Delete Key key1 success.
6. C/C++ 與 Memcached 分布式結(jié)合代碼
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <libmemcached/memcached.h>
int main(int argc, char *argv[])
{
memcached_st *memc;
memcached_return rc;
memcached_server_st *servers;
char value[8191];
//connect multi server
memc = memcached_create(NULL);
servers = memcached_server_list_append(NULL, "localhost", 11211, &rc);
servers = memcached_server_list_append(servers, "localhost", 11212, &rc);
rc = memcached_server_push(memc, servers);
memcached_server_free(servers);
//Save multi data
size_t i;
char *keys[]= {"key1", "key2", "key3"};
size_t key_length[]= {4, 4, 4};
char *values[] = {"This is c first value", "This is c second value", "This is c third value"};
size_t val_length[]= {21, 22, 21};
for (i=0; i <3; i++) {
rc = memcached_set(memc, keys[i], key_length[i], values[i], val_length[i], (time_t)180,(uint32_t)0);
if (rc == MEMCACHED_SUCCESS) {
printf("Save key:%s data:/"%s/" success./n", keys[i], values[i]);
}
}
//Fetch multi data
char return_key[MEMCACHED_MAX_KEY];
size_t return_key_length;
char *return_value;
size_t return_value_length;
uint32_t flags;
rc = memcached_mget(memc, keys, key_length, 3);
while ((return_value = memcached_fetch(memc, return_key, &return_key_length, &return_value_length, &flags, &rc))) {
if (rc == MEMCACHED_SUCCESS) {
printf("Fetch key:%s data:%s/n", return_key, return_value);
}
}
//Delete multi data
for (i=0; i <3; i++) {
rc = memcached_set(memc, keys[i], key_length[i], values[i], val_length[i], (time_t)180, (uint32_t)0);
rc = memcached_delete(memc, keys[i], key_length[i], (time_t)0);
if (rc == MEMCACHED_SUCCESS) {
printf("Delete %s success/n", keys[i], values[i]);
}
}
//free
memcached_free(memc);
return 0;
}
編譯源代碼:
[root@localhost html]# gcc -o cmultmem cmultmem.c -lmemcached [root@localhost html]# ./cmultmem //執(zhí)行 Save key:key1 data:"This is c first value" success. Save key:key2 data:"This is c second value" success. Save key:key3 data:"This is c third value" success. Fetch key:key2 data:This is c second value Fetch key:key3 data:This is c third value Fetch key:key1 data:This is c first value Delete key1 success Delete key2 success Delete key3 success
以上c/c++代碼摘自:黑夜路人
7. 查看Memcache進(jìn)程
[root@localhost html]# ps aux | grep memcached root 11382 0.0 0.7 55124 1896 ? Ssl 13:06 0:00 memcached -d -m 100 -u root -l 127.0.0.1 -p 11211 -c 256 -P /tmp/memcached.pid root 11395 0.0 0.2 3912 664 pts/1 R+ 13:08 0:00 grep memcached
8. 結(jié)束Memcache進(jìn)程
[root@localhost html]# kill `cat /tmp/memcached.pid`
希望本文所述對(duì)大家memcached緩存程序設(shè)計(jì)有所幫助。
- PHP 內(nèi)存緩存加速功能memcached安裝與用法
- 同臺(tái)服務(wù)器使用緩存APC效率高于Memcached的演示代碼
- asp.net(C#)遍歷memcached緩存對(duì)象
- PHP MemCached 高級(jí)緩存應(yīng)用代碼
- PHP MemCached高級(jí)緩存配置圖文教程
- .net/c# memcached緩存獲取所有緩存鍵的方法步驟
- php中操作memcached緩存進(jìn)行增刪改查數(shù)據(jù)的實(shí)現(xiàn)代碼
- C# Memcached緩存用法實(shí)例詳解
- Laravel中擴(kuò)展Memcached緩存驅(qū)動(dòng)實(shí)現(xiàn)使用阿里云OCS緩存
- Memcached 分布式緩存實(shí)現(xiàn)原理簡(jiǎn)介
相關(guān)文章
Rsync ERROR: auth failed on module解決方法
今天在兩臺(tái)服務(wù)器同步備份在用戶權(quán)限上糾結(jié)了很多,主要關(guān)于這個(gè)問(wèn)題網(wǎng)上的配置方法不一,源自rsync版本不一致,這里簡(jiǎn)單總結(jié)下,方便需要的朋友2013-09-09
HTTP全部標(biāo)準(zhǔn)響應(yīng)狀態(tài)碼整理
HTTP標(biāo)準(zhǔn)響應(yīng)狀態(tài)碼用來(lái)表明特定 HTTP 請(qǐng)求是否成功完成。 響應(yīng)被歸為以下五大類:信息響應(yīng) (100–199);成功響應(yīng) (200–299);重定向消息 (300–399);客戶端錯(cuò)誤響應(yīng) (400–499);服務(wù)端錯(cuò)誤響應(yīng) (500–599)2023-07-07
用兩塊硬盤組建RAID0磁盤陣列簡(jiǎn)單教程(圖文詳解)
最近為了考慮數(shù)據(jù)安全特做了raid陣列,采用兩塊或多塊硬盤組建RAID磁盤陣列也成為了目前比較有性價(jià)比的硬盤性能提升解決方案2014-05-05
DevOps自動(dòng)化組件RUNDECK開發(fā)部署使用說(shuō)明
這篇文章主要為大家介紹了DevOps自動(dòng)化組件RUNDECK開發(fā)部署使用說(shuō)明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03
服務(wù)器斷電導(dǎo)致虛擬機(jī)數(shù)據(jù)丟失的恢復(fù)方法詳解
這篇文章主要介紹了服務(wù)器斷電導(dǎo)致虛擬機(jī)數(shù)據(jù)丟失的恢復(fù)方法,較為詳細(xì)的分析了服務(wù)器斷電導(dǎo)致的數(shù)據(jù)丟失情況與相應(yīng)的故障處理技巧,需要的朋友可以參考下2018-01-01

