介紹:
Starling是一個支持MemCache協(xié)議的輕量級持久化服務(wù)器。Starling是讓創(chuàng)建網(wǎng)絡(luò)訪問隊列或者多個隊列異常簡單,也就是說多點和多臺機器間的異步工作進(jìn)程。它是著名微博客網(wǎng)站Twitter開發(fā)用來處理大量的隊列消息,以及保持服務(wù)的響應(yīng)。Starling已經(jīng)在生產(chǎn)環(huán)境中使用,不僅是Twitter在使用,F(xiàn)iveRuns同樣在使用。FiveRuns甚至還根據(jù)自己的應(yīng)用做了改進(jìn) ,他們認(rèn)為網(wǎng)站速度快了很多.
這是一個支持memcache協(xié)議的輕量級持久化服務(wù)器,因此使用php/perl/ruby/java等多種客戶端都沒問題,可以將較慢的處理邏輯通過消息隊列放在后臺處理,同時也支持多點分布式處理。
由于starling是目前twitter在生產(chǎn)環(huán)境中運行的,經(jīng)過實踐檢驗過,穩(wěn)定性應(yīng)該不成問題。
安裝:
1.安裝linux下的開發(fā)工具包,最好使用red hat的添加刪除程序安裝.
(1)在可視化窗口下載打開"添加刪除程序",找到"開發(fā)->開發(fā)工具"打鉤,更新.插入 對應(yīng)的linux安裝盤.
2.安裝ruby和ruby gem
(1)安裝錢的準(zhǔn)備
檢查系統(tǒng)是否已經(jīng)安裝了 ruby,
#rpm -qa | egrep '(ruby)|(irb)'
如果已安裝,而且不是你所要的版本,則需要先卸載她,如,
#rpm -e ruby-docs-1.8.1-7.EL4.2 \
ruby-1.8.1-7.EL4.2 \
irb-1.8.1-7.EL4.2 \
ruby-libs-1.8.1-7.EL4.2 \
ruby-mode-1.8.1-7.EL4.2 \
ruby-tcltk-1.8.1-7.EL4.2 \
ruby-devel-1.8.1-7.EL4.2
(2)安裝 Ruby
假設(shè) Ruby 安裝到 /usr/local/ruby
#mkdir /usr/local/ruby
#tar -zxvf ruby-1.8.4.tar.gz
#cd ruby-1.8.4
#./configure --prefix=/usr/local/ruby
#make
#make install
(3)設(shè)置路徑
#vi /etc/profile
在該文件中加入,
RUBY_HOME=/usr/local/ruby
PATH=$PATH:$RUBY_HOME/bin
export RUBY_HOME PATH
(4)檢查是否安裝成功
重新登錄,
#ruby -v
如果能顯示 ruby 的版本信息(ruby 1.8.4 (2005-12-24) [i686-linux]),則說明已安裝成功。
(5)安裝 Ruby Gems
#tar -zxvf rubygems-0.9.0.tgz
#cd rubygems-0.9.0
#ruby setup.rb
(6)檢查是否安裝成功
#gem -v
如果能顯示 gem 的版本信息(0.9.0),則說明已安裝成功。
3.安裝和運行 Starling
(1)輸入gem install memcache-client starling命令,自動安裝starling.
(2)輸入#starling --help檢查是否安裝成功,輸出幫助信息及安裝成功.
(3)啟動Starling
#starling -h 0.0.0.0 -d -p 22122
#netstat –lnp
編寫Java客戶端程序:
java客戶端將使用,XMemcached作為memcache的client. XMemcached是一個基于java nio的memcached客戶端。具有速度快,支持分布式訪問多個memcached服務(wù)的特點.
1.下載XMemcached http://xmemcached.googlecode.com/files/xmemcached-1.2.0-stable-include-dependencies.zip
2.把下載的zip解壓,把里面的jar包都加到一個java項目的classpath中,還需要額外增加一個log4j的包,不然會報錯.
3.寫一個放數(shù)據(jù)和一個取出數(shù)據(jù)的類
=============放數(shù)據(jù)============================
public class SetQueueTest {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
//連接starling
//XMemcachedClient是線程安全的,可以被多線程使用
XMemcachedClient client= new XMemcachedClient("192.168.4.243", 22122);
while(true){
//存儲操作
if (!client.set("hello", 0, "dennis"+System.currentTimeMillis())){
System.err.println("set error");
}
else{
System.out.println("ok");
}
Thread.sleep(2);
}
}
}
=============取數(shù)據(jù)==================
public class GetQueueTest {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
//連接starling
//XMemcachedClient是線程安全的,可以被多線程使用
XMemcachedClient client= new XMemcachedClient("192.168.4.243", 22122);
//存儲操作
while(true){
String name=(String)client.get("hello");
//如果隊列中已經(jīng)沒有數(shù)據(jù)了,休息一下再試
if(name==null){
Thread.sleep(5);
continue;
}
System.out.println(name);
}
}
}
性能測試
這是別人用php測試的結(jié)果,僅供參考.
測試條件:
key的長度16B
value的長度100B,
8個并發(fā)寫入進(jìn)程
每個進(jìn)程插入10,000條記錄
平均每個進(jìn)程花了7秒完成寫入操作,那么照這樣計算:
10000 * 8 / 7 = 每秒寫入11428次