主頁 > 服務器技術 > Memcache的hash策略及配置總結

Memcache的hash策略及配置總結

PDF版本

Memcach是web應用/Drupal應用性能提高的利器,近期在使用Memcache中,發現有很多小問題,因此作者特意總結了幾個,放上來供大家參考使用。

1. Memcache和Memcached的區別

這個是歷史問題,但是,言而總之:名字長的更牛逼! ?

所以,推薦使用memcached。
另外,memcached有很多新特性,包括getMulti/setMulti、支持存儲object、支持count+1操作,都會比memcache的好用一些,可以試試,或許以后支持更多的操作,趕上redis。。

Drupal大學上關于memcache的問答:http://../apachesolr_search/memcache


如下(摘自德問):

#Memcache
$m = new Memcache();
$m->addServer('localhost', 11211);
$v = $m->get('counter');
$m->set('counter', $v + 1); 
#由于get/set這兩個動作無法作為一個原子來操作,所以當多個進程同時處理時,
#會出現丟失的可能,更讓人惱火的是,你根本就不知道什么時候出現丟失。

#Memcached
$md = new Memcached();
$md->addServer('localhost', 11211);
$v = $md->get('counter', null, $token)
$md->cas($token, 'counter', $v + 1);
#cas是Memcached版本里提供的功能,說白了就是一個樂觀鎖的功能,
#如果你把$token的值var_dump出來,就會發現$token其實就是一個版本號,
#如果通過get得到的$token版本號在cas的時候不對應,就說明已經有別的操作更新了,
#此時cas操作會失敗,至于如何繼續操作,就看你自己了

兩者的區別如下,下面是Memcache的方法:
memcache

下面是memcached的方法:
memcached

2. Memcache的哈希策略

常規的hash策略是取模,比如key=10, 有兩臺服務,就10%2=0,算出該值分布在第一臺服務器上。
那么缺點也很明顯,比如服務器增加一臺,之前的分布式策略全完蛋。

因此,業界需要更牛逼的算法~

一致性hash算法隆重登場!

簡單說來,一致性hash算法就是先把服務器也通過某一個特征(如IP/MAC地址)hash一下,這樣服務器會按照分布(可能不均勻)在一個范圍,然后把key再hash一下,然后看key最近的下個服務器作為該key的存儲bin。
這樣,如果增加一臺服務器,重新分配的key只是分布再新增的這個服務器和上一個最近的服務器之間的key,其余的都不變。

初步的服務器分布:

hash-1

增加服務器的分布:
hash-2

上面的描述的是白話,可能比較拗口,筆者文字水平有限,詳情見下面的鏈接:

http://blogread.cn/it/article/5271
http://blog.csdn.net/kongqz/article/details/6695417

3. Memcache的hash策略配置

Memcache安裝完成之后,可以設置哈希策略,memcache.hash_strategy。目前有standard模式和consistent模式。standard模式其實就是%,即取模。而consistent,就是hash的一致性算法。

在Memcache中,hash策略在PHP.ini文件中設置

[Memcache] 
Memcache.allow_failover = 1 
…… 
…… 
Memcache.hash_strategy =consistent 
Memcache.hash_function =crc32

在Memcached中,hash策略在PHP的參數中設置:

mem = new memcached(); 
$mem->setOption(Memcached::OPT_DISTRIBUTION,Memcached::DISTRIBUTION_CONSISTENT); 
$mem->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE,true);

 

4. 后記

因此正常情況下,推薦使用一致性哈希算法,但凡事無絕對,比如一個小的站點,memcache的服務幾乎永不會增加,這是用常規的standard的算法也是比較推薦的,畢竟一致性算法存在一個均勻分布的問題(可能已經解決了。。)

打完收工!

關于drupal和memcache的集成,大家參考下面的文章:
如何在Drupal7中配置Memcache
更多問題請到Drupal大學提問:http://drupal001.net/


聲明: 本站所有文章歡迎轉載,所有文章未說明,均屬于原創,轉載均請注明出處。
本文有效鏈接: http://www.tbdskt.live/2015/04/memcache/
版權所有: Drupal與高性能網站架構 http://www.tbdskt.live


,

評論:1

發表評論
  1. avatar
    回復 孤城浪子
    17/07/09

    php.ini里面的Memcache.hash_strategy =consistent ,這里第一個M要小寫才行,大寫沒有效果,親測!

發表評論

電子郵件地址不會被公開。 必填項已用 * 標注


× 7 = 五十 六

您可以使用這些 HTML 標簽和屬性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

引用:0

下面所列的是引用到本博客的鏈接
Memcache的hash策略及配置總結 來自 Drupal與高性能網站架構
頂部
四川时时彩投注平台