Memcached-java入門(鉄木箱から回転)

6380 ワード


 
 
 インターネットbaiduは多くのものを利用して、ほとんど悪くなくて、その上javaの言うことに基づいて少なくて、すべてただ各他の言語類の応用を研究した後にjavaの上で簡単な操作の応用を試みるだけです.まずmemcachedから説明しますが、memcachedの最新版はc言語で開発・設計されています.旧版はperl言語で開発されたもので、キャッシュサーバのサーバ側としてサーバ上で動作するアプリケーションソフトウェアで、特定の言語でクライアントを記述して通信してデータのキャッシュと取得を行う必要があると言われています.通常、memcachedをwebサーバにインストールして実行し、必要なデータをキャッシュすることによって、私が現在知っている限りでは、すべてのデータのキャッシュ設定とアクセス操作、およびデータの更新後に操作を置き換えるには、自動的に実行するのではなく、すべてのプログラムが必要です(自動的に成功できるかどうか分かりませんが、ほほほ).次に、memcachedを実際の例から適用する.         まずhttp://danga.com/memcached/memcachedのwindowsバージョンをダウンロードします(注:原作者が提供したアドレスにダウンロードパッケージが見つかりませんcsdn 0分ダウンロードアドレスを提供します:  http://download.csdn.net/detail/miller_cn/4867520)とjavaクライアントjarパッケージ(http://download.csdn.net/detail/miller_cn/4867509)!まずmemcachedサーバをインストールして実行し、memcached.zipを解凍してディレクトリに入り、次のコマンドを実行します.
c:>memcached.exe -d install
c:>memcached.exe -l 127.0.0.1 -m 32 -d start
 
-pリスニングのポート-l接続のIPアドレスで、デフォルトは自機-d startがmemcachedサービスを起動-d restartがmemcachedサービスを再開-d stop|shutdownが実行中のmemcachedサービスを閉じる-d installがmemcachedサービスをインストール-d uninstallがmemcachedサービス-uをアンインストールして実行する(rootで実行する場合のみ有効)-m最大メモリ使用、単位MB.デフォルト64 MB-Mメモリ消費時にエラーが返されます.アイテム-cの最大同時接続数を削除するのではなく、デフォルトは1024-fブロックサイズの増加係数、デフォルトは1.25-n最小分配空間、key+value+flagsのデフォルトは48-hです.    最初の行はmemcachedをインストールしてサービスになります.そうしないと、正常に動作しません.そうしないと、実行に失敗します.最初の行はmemcachedを起動し、テストとして32 Mメモリのみを簡単に割り当て、ホストポートを傍受し、実行を守ります.実行が完了すると、memcached.exeというプロセスがタスクマネージャに表示されます.はい、私たちのサーバーは正常に動作しています.次にjavaのクライアント接続プログラムを書きます.      Java_memcached-release_1.6.zip解凍後のディレクトリのjava_memcached-release_1.6.jarファイルをjavaプロジェクトのlibディレクトリにコピーし(ここではlog 4 jパッケージをインポートする必要があります)、次に私が提供したアプリケーションクラスのようなコードを作成します.
package utils.cache;

import java.util.Date;

import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;


/**
*   memcached      .
*
* @author     
*
*/
publicclass MemCached
{
    //          
    protectedstatic MemCachedClient mcc =new MemCachedClient();
   
    protectedstatic MemCached memCached =new MemCached();
   
    //             
    static {
        //          
        String[] servers = {"127.0.0.1:11211"};
        Integer[] weights = {3};

        //   socke        
        SockIOPool pool = SockIOPool.getInstance();

        //        
        pool.setServers( servers );
        pool.setWeights( weights );

        //        、                
        pool.setInitConn( 5 );
        pool.setMinConn( 5 );
        pool.setMaxConn( 250 );
        pool.setMaxIdle( 1000*60*60*6 );

        //           
        pool.setMaintSleep( 30 );

        //   TCP   ,     
        pool.setNagle( false );
        pool.setSocketTO( 3000 );
        pool.setSocketConnectTO( 0 );

        //       
        pool.initialize();

        //     ,      (   K)        
        mcc.setCompressEnable( true );
        mcc.setCompressThreshold( 64*1024 );
    }
   
    /**
     *        ,      !
     *
     */
    protected MemCached()
    {
       
    }
   
    /**
     *       .
     * @return
     */
    publicstatic MemCached getInstance()
    {
        return memCached;
    }
   
    /**
     *             .
     * @param key
     * @param value
     * @return
     */
    publicboolean add(String key, Object value)
    {
        return mcc.add(key, value);
    }
   
    publicboolean add(String key, Object value, Date expiry)
    {
        return mcc.add(key, value, expiry);
    }
   
    publicboolean replace(String key, Object value)
    {
        return mcc.replace(key, value);
    }
   
    publicboolean replace(String key, Object value, Date expiry)
    {
        return mcc.replace(key, value, expiry);
    }
   
    /**
     *             .
     * @param key
     * @return
     */
    public Object get(String key)
    {
        return mcc.get(key);
    }
   
    publicstaticvoid main(String[] args)
    {
        MemCached cache = MemCached.getInstance();
        cache.add("hello", 234);
        System.out.print("get value : "+ cache.get("hello"));
    }
}

 

 
    では、mainメソッドで操作するように簡単に変数を格納してから取り出して表示することができます.addを呼び出してからgetを行うことができます.私たちが実行した後、234という値はmemcachedのキャッシュに格納されています.mainメソッドの赤い行を注釈した後、また実行すると、getからのvalueも234であることがわかります.つまり、キャッシュにデータが存在しています.      基本的なデータは操作できますが、通常のPOJOでは、記憶する場合はjava.io.Serializableインタフェースを実現させます.memcachedは分散型のキャッシュサーバであり、複数のサーバ間でデータ共有を行うにはオブジェクトをシーケンス化する必要があるため、そのインタフェースを実現しなければなりません.そうしないと、エラーが発生します.たとえば、簡単なテストBeanを次のように書きます. 
class TBean implements java.io.Serializable
{
    privatestaticfinallong serialVersionUID =1945562032261336919L;
   
    private String name;

    public String getName()
    {
        return name;
    }

    publicvoid setName(String name)
    {
        this.name = name;
    }
}

 

 
    次にmainメソッドに次のコードを追加します.
TBean tb =new TBean();
tb.setName("    ");
cache.add("bean", tb);
TBean tb1 = (TBean)cache.get("bean");
System.out.print("name="+ tb1.getName());
tb1.setName("    _   ");
tb1 = (TBean)cache.get("bean");
System.out.print("name="+ tb1.getName());

 

 
    まずTBEanのインスタンスをキャッシュに入れてから取り出し、名前の変更を行います.次に、このオブジェクトを取ります.名前を見てみると、変更されたオブジェクトはキャッシュ内のオブジェクトではなく、シーケンス化されたインスタンス対象であることがわかります.これにより、元のクラスに対する無意識な変更がキャッシュデータの失効を招く心配はありません.ふふ~~私もそう思いますね.したがって、これは、キャッシュから取得されたオブジェクトが格納されたオブジェクトのコピーであり、取得されたオブジェクトの変更に対してキャッシュ内のデータを本当に変更することはできず、提供されたreplaceなどの方法で変更すべきであることを示している.      以上は私がwindowsの下でmemcachedに対する少しの学习と実践で、后のプロジェクトの开発の过程の中で更に深くこのキャッシュツールを学ぶことができて応用して、兴味のある同業者と一绪にこのツールの使用を学ぶことをも望んでいます~~