一個快速的消息隊列(最大堆)


消息隊列大家應該都聽過了, 至於消息隊列有什麼用呢?
如果大家有個網站需要1秒鐘處理10000次數據庫的話, 我相信數據庫是頂不住的, 這個時候可以使用消息隊列:
把操作數據庫的請求先保存到消息隊列中, 然後通過取得消息隊列的操作, 一個個的操作數據庫, 這樣就可以減緩數據庫的負擔.

kmessage, 是我最近寫的一個消息隊列, 其實不是隊列, 而是最大堆(因爲最大堆可以設置權限, 隊列不行):
kmessage有以下方法:
put($data, $level = 0);
保存一個記錄到消息隊列中, level是隊列的優先權, level越大, 這個記錄就越先被訪問, 如果權限一樣, 那麼先後順序爲不確定

get_one();
消息隊列中取得一個記錄

get_list($size);
消息隊列取得$size個記錄

status();
取得消息隊列的狀態, 形式爲json: {queue_size:隊列大小, queue_mem_alloc:隊列申請的內存}

close();
關閉一個連接
========================================================================

使用方法:
  1. //----------------保存數據-------------------------
  2. include('kmessage.php');

  3. define('HOST', '127.0.0.1');
  4. define('PORT', 7878);

  5. $km = new Kmessage();
  6. if (!$km->connect(HOST, PORT)) {
  7.     $km->error_string();
  8.     exit;
  9. }

  10. for($i = 0; $i < 100; $i++) {
  11.     $km->put("record $i", 100 - $i);
  12. }
複製代碼

  1. //----------------獲取數據-------------------------
  2. include('kmessage.php');

  3. define('HOST', '127.0.0.1');
  4. define('PORT', 7878);

  5. $km = new Kmessage();
  6. if (!$km->connect(HOST, PORT)) {
  7.     $km->error_string();
  8.     exit;
  9. }

  10. while (($msg = $km->get_one())) {
  11.     echo $msg, "\n";
  12. }
複製代碼


服務器選項:


http://code.google.com/p/kmessage/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章