久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

memcached完全剖析–1. memcached的基礎(chǔ)...

 goldbomb 2008-08-20

翻譯一篇技術(shù)評(píng)論社的文章,是講memcached的連載,。fcicq同學(xué)說這個(gè)東西很有用,希望大家喜歡。

發(fā)表日:2008/7/2
作者:長(zhǎng)野雅廣(Masahiro Nagano)
原文鏈接:http:///dev/feature/01/memcached/0001

我是mixi株式會(huì)社開發(fā)部系統(tǒng)運(yùn)營(yíng)組的長(zhǎng)野,。日常負(fù)責(zé)程序的運(yùn)營(yíng)。從今天開始,,將分幾次針對(duì)最近在Web應(yīng)用的可擴(kuò)展性領(lǐng)域的熱門話題memcached,,與我公司開發(fā)部研究開發(fā)組的前坂一起,說明其內(nèi)部結(jié)構(gòu)和使用,。

memcached是什么?

memcached 是以LiveJournal 旗下Danga Interactive 公司的Brad Fitzpatric 為首開發(fā)的一款軟件?,F(xiàn)在已成為 mixi,、 hatenaFacebook,、 Vox,、LiveJournal等眾多服務(wù)中提高Web應(yīng)用擴(kuò)展性的重要因素。

許多Web應(yīng)用都將數(shù)據(jù)保存到RDBMS中,,應(yīng)用服務(wù)器從中讀取數(shù)據(jù)并在瀏覽器中顯示,。但隨著數(shù)據(jù)量的增大、訪問的集中,,就會(huì)出現(xiàn)RDBMS的負(fù)擔(dān)加重,、數(shù)據(jù)庫(kù)響應(yīng)惡化、網(wǎng)站顯示延遲等重大影響,。

這時(shí)就該memcached大顯身手了,。memcached是高性能的分布式內(nèi)存緩存服務(wù)器。一般的使用目的是,,通過緩存數(shù)據(jù)庫(kù)查詢結(jié)果,,減少數(shù)據(jù)庫(kù)訪問次數(shù),以提高動(dòng)態(tài)Web應(yīng)用的速度,、提高可擴(kuò)展性,。

memcached-0001-01.png

圖1 一般情況下memcached的用途

memcached的特征

memcached作為高速運(yùn)行的分布式緩存服務(wù)器,具有以下的特點(diǎn),。

  • 協(xié)議簡(jiǎn)單
  • 基于libevent的事件處理
  • 內(nèi)置內(nèi)存存儲(chǔ)方式
  • memcached不互相通信的分布式

協(xié)議簡(jiǎn)單

memcached的服務(wù)器客戶端通信并不使用復(fù)雜的XML等格式,,而使用簡(jiǎn)單的基于文本行的協(xié)議,。因此,通過telnet 也能在memcached上保存數(shù)據(jù),、取得數(shù)據(jù),。下面是例子。

$ telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
set foo 0 0 3     (保存命令)
bar               (數(shù)據(jù))
STORED            (結(jié)果)
get foo           (取得命令)
VALUE foo 0 3     (數(shù)據(jù))
bar               (數(shù)據(jù))

協(xié)議文檔位于memcached的源代碼內(nèi),,也可以參考以下的URL,。

基于libevent的事件處理

libevent是個(gè)程序庫(kù),它將Linux的epoll,、BSD類操作系統(tǒng)的kqueue等事件處理功能封裝成統(tǒng)一的接口,。即使對(duì)服務(wù)器的連接數(shù)增加,也能發(fā)揮O(1)的性能,。 memcached使用這個(gè)libevent庫(kù),,因此能在Linux、BSD,、Solaris等操作系統(tǒng)上發(fā)揮其高性能,。關(guān)于事件處理這里就不再詳細(xì)介紹,可以參考Dan Kegel的The C10K Problem,。

內(nèi)置內(nèi)存存儲(chǔ)方式

為了提高性能,,memcached中保存的數(shù)據(jù)都存儲(chǔ)在memcached內(nèi)置的內(nèi)存存儲(chǔ)空間中。由于數(shù)據(jù)僅存在于內(nèi)存中,,因此重啟memcached,、重啟操作系統(tǒng)會(huì)導(dǎo)致全部數(shù)據(jù)消失。另外,,內(nèi)容容量達(dá)到指定值之后,,就基于LRU(Least Recently Used)算法自動(dòng)刪除不使用的緩存。 memcached本身是為緩存而設(shè)計(jì)的服務(wù)器,,因此并沒有過多考慮數(shù)據(jù)的永久性問題,。關(guān)于內(nèi)存存儲(chǔ)的詳細(xì)信息,本連載的第二講以后前坂會(huì)進(jìn)行介紹,,請(qǐng)屆時(shí)參考,。

memcached不互相通信的分布式

memcached盡管是“分布式”緩存服務(wù)器,但服務(wù)器端并沒有分布式功能,。各個(gè)memcached不會(huì)互相通信以共享信息,。那么,怎樣進(jìn)行分布式呢,?這完全取決于客戶端的實(shí)現(xiàn)。本連載也將介紹memcached的分布式,。

memcached-0001-02.png

圖2 memcached的分布式

接下來簡(jiǎn)單介紹一下memcached的使用方法,。

安裝memcached

memcached的安裝比較簡(jiǎn)單,,這里稍加說明。

memcached支持許多平臺(tái),。

  • Linux
  • FreeBSD
  • Solaris (memcached 1.2.5以上版本)
  • Mac OS X

另外也能安裝在Windows上,。這里使用Fedora Core 8進(jìn)行說明。

memcached的安裝

運(yùn)行memcached需要本文開頭介紹的libevent庫(kù),。Fedora 8中有現(xiàn)成的rpm包,,通過yum命令安裝即可。

$ sudo yum install libevent libevent-devel

memcached的源代碼可以從memcached網(wǎng)站上下載,。本文執(zhí)筆時(shí)的最新版本為1.2.5,。 Fedora 8雖然也包含了memcached的rpm,但版本比較老,。因?yàn)樵创a安裝并不困難,,這里就不使用rpm了。

memcached安裝與一般應(yīng)用程序相同,,configure,、make、make install就行了,。

$ wget http://www./memcached/dist/memcached-1.2.5.tar.gz
$ tar zxf memcached-1.2.5.tar.gz
$ cd memcached-1.2.5
$ ./configure
$ make
$ sudo make install

默認(rèn)情況下memcached安裝到/usr/local/bin下,。

memcached的啟動(dòng)

從終端輸入以下命令,啟動(dòng)memcached,。

$ /usr/local/bin/memcached -p 11211 -m 64m -vv
slab class   1: chunk size     88 perslab 11915
slab class   2: chunk size    112 perslab  9362
slab class   3: chunk size    144 perslab  7281
中間省略
slab class  38: chunk size 391224 perslab     2
slab class  39: chunk size 489032 perslab     2
<23 server listening
<24 send buffer was 110592, now 268435456
<24 server listening (udp)
<24 server listening (udp)
<24 server listening (udp)
<24 server listening (udp)

這里顯示了調(diào)試信息,。這樣就在前臺(tái)啟動(dòng)了memcached,監(jiān)聽TCP端口11211 最大內(nèi)存使用量為64M,。調(diào)試信息的內(nèi)容大部分是關(guān)于存儲(chǔ)的信息,,下次連載時(shí)具體說明。

作為daemon后臺(tái)啟動(dòng)時(shí),,只需

$ /usr/local/bin/memcached -p 11211 -m 64m -d

這里使用的memcached啟動(dòng)選項(xiàng)的內(nèi)容如下,。

選項(xiàng) 說明
-p 使用的TCP端口。默認(rèn)為11211
-m 最大內(nèi)存大小,。默認(rèn)為64M
-vv 用very vrebose模式啟動(dòng),,調(diào)試信息和錯(cuò)誤輸出到控制臺(tái)
-d 作為daemon在后臺(tái)啟動(dòng)

上面四個(gè)是常用的啟動(dòng)選項(xiàng),其他還有很多,,通過

$ /usr/local/bin/memcached -h

命令可以顯示,。許多選項(xiàng)可以改變memcached的各種行為,推薦讀一讀,。

用客戶端連接

許多語(yǔ)言都實(shí)現(xiàn)了連接memcached的客戶端,,其中以Perl、PHP為主,。僅僅memcached網(wǎng)站上列出的語(yǔ)言就有

  • Perl
  • PHP
  • Python
  • Ruby
  • C#
  • C/C++
  • Lua

等等,。

這里介紹通過mixi正在使用的Perl庫(kù)鏈接memcached的方法,。

使用Cache::Memcached

Perl的memcached客戶端有

  • Cache::Memcached
  • Cache::Memcached::Fast
  • Cache::Memcached::libmemcached

等幾個(gè)CPAN模塊。這里介紹的Cache::Memcached是memcached的作者Brad Fitzpatric的作品,,應(yīng)該算是memcached的客戶端中應(yīng)用最為廣泛的模塊了,。

使用Cache::Memcached連接memcached

下面的源代碼為通過Cache::Memcached連接剛才啟動(dòng)的memcached的例子。

#!/usr/bin/perl
use strict;
use warnings;
use Cache::Memcached;
my $key = "foo";
my $value = "bar";
my $expires = 3600; # 1 hour
my $memcached = Cache::Memcached->new({
servers => ["127.0.0.1:11211"],
compress_threshold => 10_000
});
$memcached->add($key, $value, $expires);
my $ret = $memcached->get($key);
print "$ret\n";

在這里,,為Cache::Memcached指定了memcached服務(wù)器的IP地址和一個(gè)選項(xiàng),,以生成實(shí)例。 Cache::Memcached常用的選項(xiàng)如下所示,。

選項(xiàng) 說明
servers 用數(shù)組指定memcached服務(wù)器和端口
compress_threshold 數(shù)據(jù)壓縮時(shí)使用的值
namespace 指定添加到鍵的前綴

另外,,Cache::Memcached通過Storable模塊可以將Perl的復(fù)雜數(shù)據(jù)序列化之后再保存,因此散列,、數(shù)組,、對(duì)象等都可以直接保存到memcached中。

保存數(shù)據(jù)

向memcached保存數(shù)據(jù)的方法有

  • add
  • replace
  • set

它們的使用方法都相同:

my $add = $memcached->add( '鍵', '值', '期限' );
my $replace = $memcached->replace( '鍵', '值', '期限' );
my $set = $memcached->set( '鍵', '值', '期限' );

向memcached保存數(shù)據(jù)時(shí)可以指定期限(秒),。不指定期限時(shí),,memcached按照LRU算法保存數(shù)據(jù)。這三個(gè)方法的區(qū)別如下:

選項(xiàng) 說明
add 僅當(dāng)存儲(chǔ)空間中不存在鍵相同的數(shù)據(jù)時(shí)才保存
replace 僅當(dāng)存儲(chǔ)空間中存在鍵相同的數(shù)據(jù)時(shí)才保存
set 與add和replace不同,,無論何時(shí)都保存

獲取數(shù)據(jù)

獲取數(shù)據(jù)可以使用get和get_multi方法,。

my $val = $memcached->get('鍵');
my $val = $memcached->get_multi('鍵1', '鍵2', '鍵3', '鍵4', '鍵5');

一次取得多條數(shù)據(jù)時(shí)使用get_multi。get_multi可以非同步地同時(shí)取得多個(gè)鍵值,,其速度要比循環(huán)調(diào)用get快數(shù)十倍,。

刪除數(shù)據(jù)

刪除數(shù)據(jù)使用delete方法,不過它有個(gè)獨(dú)特的功能,。

$memcached->delete('鍵', '阻塞時(shí)間(秒)');

刪除第一個(gè)參數(shù)指定的鍵的數(shù)據(jù),。第二個(gè)參數(shù)指定一個(gè)時(shí)間值,可以禁止使用同樣的鍵保存新數(shù)據(jù),。此功能可以用于防止緩存數(shù)據(jù)的不完整,。但是要注意,set函數(shù)忽視該阻塞,,照常保存數(shù)據(jù)

增一和減一操作

可以將memcached上特定的鍵值作為計(jì)數(shù)器使用,。

my $ret = $memcached->incr('鍵');
$memcached->add('鍵', 0) unless defined $ret;

增一和減一是原子操作,但未設(shè)置初始值時(shí),,不會(huì)自動(dòng)賦成0,。因此,應(yīng)當(dāng)進(jìn)行錯(cuò)誤檢查,,必要時(shí)加入初始化操作,。而且,服務(wù)器端也不會(huì)對(duì)超過2<sup>32</sup>時(shí)的行為進(jìn)行檢查,。

總結(jié)

這次簡(jiǎn)單介紹了memcached,,以及它的安裝方法,、Perl客戶端Cache::Memcached的用法。只要知道,,memcached的使用方法十分簡(jiǎn)單就足夠了。

下次由前坂來說明memcached的內(nèi)部結(jié)構(gòu),。了解memcached的內(nèi)部構(gòu)造,,就能知道如何使用memcached才能使Web應(yīng)用的速度更上一層樓。歡迎繼續(xù)閱讀下一章

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多