memcache研究

6765 ワード

memcache研究
 
最近、共有メモリを利用して作ったデータベースを開発し、削除・変更の性能をテストし、memcachedデータベースと比較したいのでmemcachedを検討しました.
 
memcachedとは何ですか?
memcachedは高性能で分散型のメモリキャッシュサーバであり、メモリのデータアクセスによってデータベースへのアクセスを低減し、動的コンテンツアプリケーションサイトの速度を向上させる.
 
memcachedの特徴:
(1)C/Sアーキテクチャに基づいて、プロトコルが簡単である.
(2)libeventベースのイベント処理;libeventを用いたネットワーク同時接続の処理は、大きな同時状態を維持し、迅速な対応能力を維持することができる.
(3)内蔵メモリ方式、データ記憶方式Slab Allocation、データ期限切れ方式:Lazy Expiration+LRU.
(4)クライアントベースmemcached分布式;
 
その他の具体的な詳細は、他の参考ドキュメントを参照してください.ここでは詳しく説明しません.後で深く研究したら、分析を展開します.
 
次にmemcachedのインストール方法とクライアントのインストール方法、C++コードを使用してテストする方法を見てみましょう.
1.memcachedインストール
インストール手順:
(1)memcachedはlibeventに基づく時間処理であるため、インストール前にlibeventをインストールし、公式サイトからダウンロードすることができ、http://monkey.org/~provos/libevent/、私が使用するインストールバージョンは:libevent-1.3である.tar.gz
(2)memcachedメインプログラムをインストールし、公式サイトからダウンロードできます:http://www.danga.com/memcached、私が使用しているバージョンは:memcached-1.2です.2.tar.gz
(3)私がここで使用しているC/C++memcachedクライアントライブラリ:libmemcached、開発ライブラリの公式サイトからダウンロードできます:http://tangent.org/552/libmemcached.html、私が使用しているバージョンは:libmemcached-0.42です.tar.gz
 
説明:これらの資料は私のリソース空間で無料でダウンロードできます:http://download.csdn.net/detail/feitianxuxue/5739345
libeventのインストール
解凍ファイル:tar-zxvf libevent-1.3.tar.gz,ディレクトリへ:cd libevent-1.3
プリコンパイル:./configure--prefix=/usr(パスは自分で設定できます)
コンパイルとインストール:make&&make install
インストールに成功したかどうかをテストします:ls-al/usr/lib|grep libevent
表示:
lrwxrwxrwx   1 root root       21 07-09 22:14 libevent-1.3.so.1 -> libevent-1.3.so.1.0.3
-rwxr-xr-x   1 root root   337676 07-09 22:14 libevent-1.3.so.1.0.3
-rw-r--r--   1 root root   532580 07-09 22:14 libevent.a
-rwxr-xr-x   1 root root      805 07-09 22:14 libevent.la
lrwxrwxrwx   1 root root       21 07-09 22:14 libevent.so -> libevent-1.3.so.1.0.3
memcachedのインストール
解凍ファイル:tar–zxvf memcached-1.2.2.tar.gz,ディレクトリに入る:cd memcached-1.2.2
プリコンパイル:./configure--with-libevent=/usr(libeventのインストールパスを参照)
コンパイルとインストール:make&&make install
インストールが完了すると、デフォルトのパスが保存されます:/usr/local/bin/memcached
インストールに成功したかどうかをテストします:ls-al/usr/local/bin/mem*
-rwxr-xr-x 1 root root 142346 07-11 09:27 /usr/local/bin/memcached
-rwxr-xr-x 1 root root 152004 07-11 09:27 /usr/local/bin/memcached-debug
インストールC/C++memcachedクライアントライブラリ:libmemcached
解凍ファイル:tar-zxvf libmemcached-0.42.tar.gz,ディレクトリへ:cd libmemcached-0.42
プリコンパイル:./configure--prefix=/usr(パスは自分で設定できます)
コンパイルとインストール:make&&make install
インストールに成功したかどうかをテストします.
ライブラリファイルの確認:ls/usr/lib/libmemcache*
チェックヘッダファイル:ls/usr/include/libmemcached/*
コマンドラインチェックツール:ls/usr/bin/mem*
 
それ以来、すべてのライブラリがインストールされ、作業を開始できます.
2.memcachedサービスを起動する
アクセス:cd/usr/local/bin/、利用可能./memcached–hヘルプ情報が表示されます
実行:./memcached-u root-d、ここで-dオプションはデーモンプロセスを開始し、-uはMemcacheを実行するユーザーです.
デフォルト起動TCPポート:11211
プログラム実行を表示できます:ps-ef|grep memcached
root      2992     1  0 11:20 ?        00:00:00 ./memcached -u root –d
3.簡単なC++テストプログラム
memcachedサーバに接続し、レコードを追加し、レコードを取得し、レコードを削除します.
コードは次の通りです.cpp
#include <iostream>
#include <string>
#include <libmemcached/memcached.h>

using namespace std;

int main(int argc,char *argv[])
{
    //connect server
    memcached_st *memc;
    memcached_return rc;
    memcached_server_st *server;
    time_t expiration;
    uint32_t  flags;
    
    memc = memcached_create(NULL);
    server = memcached_server_list_append(NULL,"localhost",11211,&rc);
    rc=memcached_server_push(memc,server);
    memcached_server_list_free(server);
    
    string key = "key";
    string value = "value";
    size_t value_length = value.length();
  size_t key_length = key.length();
  
  
      //Save data
      rc=memcached_set(memc,key.c_str(),key.length(),value.c_str(),value.length(),expiration,flags);
      if(rc==MEMCACHED_SUCCESS)
      {
          cout<<"Save data:"<<value<<" sucessful!"<<endl;
      }
  
      //Get data
      char* result = memcached_get(memc,key.c_str(),key_length,&value_length,&flags,&rc);
      if(rc == MEMCACHED_SUCCESS)
      {
          cout<<"Get value:"<<result<<" sucessful!"<<endl;
      }
  
      //Delete data
      rc=memcached_delete(memc,key.c_str(),key_length,expiration);
      if(rc==MEMCACHED_SUCCESS)
      {
          cout<<"Delete key:"<<key<<" sucessful!"<<endl;
      }
  
      //free
      memcached_free(memc);
      return 0;
  }

コンパイル:g++test.cpp –o test –lmemcached
実行:[root@localhost test]# ./test1 
エラーが発生する可能性があります:./test1: error while loading shared libraries: libmemcached.so.5: cannot open shared object file: No such file or directory
エラー:
理由:一部の外部プログラムを実行すると、共有ライブラリのエラーが見つからないことを示す可能性があります.
(1)オペレーティングシステムにこの共有ライブラリ(lib*.so.*ファイル)が含まれていないか、共有ライブラリのバージョンが間違っている場合は、ネット上でダウンロードしてインストールすればよい.(2)既にこの共有ライブラリがインストールされているが、その共有ライブラリを呼び出す必要があるプログラムを実行する場合、プログラムはデフォルトの共有ライブラリパスに従ってその共有ライブラリファイルが見つからない.
解決方法:
(1)共有ライブラリファイルが他の「非/libまたは/usr/lib」ディレクトリにインストール場合、/etc/ld.so.confにパスを追加したくない(またはパスを追加する権限がない).グローバル変数LDをexportできますLIBRARY_PATH、そしてプログラムを実行するときにこのディレクトリに共有ライブラリを探します.  LD_LIBRARY_PATHの意味はloaderがどのディレクトリで共有ライブラリを見つけることができるかを教えることです.複数の検索ディレクトリを設定ことができ、これらのディレクトリ間をコロンで区切ることができる.例えばmysqlを/usr/local/mysqlディレクトリにインストールし、/usr/local/mysql/libの下にライブラリファイルが山積みになっている場合は、.bashrcまたは.bash_profileまたはshellには、export LD_という文を追加します.LIBRARY_PATH=/usr/local//lib:$LD_LIBRARY_PATH     export LD_LIBRARY_PATH=/usr/lib
(2)共有ライブラリファイルが/libまたは/usr/libディレクトリにインストールされている場合はldconfigコマンドを実行する必要があります
(3)共有ライブラリファイルが/usr/local/lib(多くのオープンソースの共有ライブラリがそのディレクトリにインストールされている)または他の「非/libまたは/usr/lib」ディレクトリにインストール場合、ldconfigコマンドを実行する前に、新しい共有ライブラリディレクトリを共有ライブラリプロファイル/etc/ldに追加する.so.confでは、#cat/etc/ld.so.conf include ld.so.conf.d/*.conf# echo "/usr/local/lib" >> /etc/ld.so.conf# ldconfig
 
結果:
Save data:value sucessful!
Get value:value sucessful!
Delete key:key sucessful!