• Showing Page History #96038

Show page source of memcached_cache #96038

= Memcached-Cacheプラグイン
== はじめに
{{{
	JAutoregexerでは、さまざまなコンテキスト情報を内部キャッシュに保存することで、正規表現解析実行時のオーバーヘッドを極力
	小さくするように設計されております。

	Memcached-Cacheプラグインは、コンテキスト情報のうち、正規表現パターン(java.util.regex.Patternインスタンス)をMemcachedにキャッシュすることに
	よって、正規表現パターンのコンパイル回数を減らし、処理を高速化することを目的として導入されたプラグインです。

	JAutoregexerが所属するJVMが単一のシングル環境は元より、複数のJVMでテキストコンテンツを解析するような分散環境で
	特に威力を発揮します。
}}}

== Memcached-Cacheプラグイン使用
{{{
	Memcached-Cacheプラグインは、memcached4jというjava/memcachedクライアントを利用して動作するプラグインです。
	利用する際は、memcached4j(とその依存ライブラリ)をクラスパスに含めます。
	
	また、Memcached-Cacheプラグイン本体のjarもクラスパスに含めます。
	
	この状態でorg.dyndns.nuda.tools.regex.RegexProcessorクラスをインスタンス化することで、自動的に
	Memcachedを用いたキャッシュ機構が動作します。
	
	
}}}
== サーバ設定情報
{{{
	Memcachedクライアントには、どのサーバに接続するのかを指示する設定情報が必要です。
	
	Memcached-Cacheプラグインでは、デフォルトでローカルマシンの11211番ポートに接続を試みますが、
	そのポートでMemcachedが稼働していない場合は、内部キャッシュ機構を使用するように自動的に
	切り替わります。
	
	
	このセクションでは、Memcachedサーバ接続情報をどのようにMemcached-Cacheプラグインに伝えるのかを
	解説します。
}}}
=== Memcached-Cacheサーバ設定情報プラグイン
{{{
	Memcached-Cacheプラグインでは、サーバ設定情報を「専用のプラグイン」を使用して取得します。
	プラグインインタフェースは「org.dundns.nuda.tools.regex.settings.JAutoRegexerSettings」です。
	
	このプラグインインタフェースは、外部からJAutoregexerに対して設定情報をインジェクションする際に
	用いられるプラグインです。
	
	JAutoRegexerSettingsプラグインインタフェースの定義は以下の通りです。
}}}

{{{ code java
package org.dyndns.nuda.tools.regex.settings;

import org.dyndns.nuda.plugin.Plugable;

/**
 * JAutoRegexer全体の挙動を決定するためのプラグインインタフェースです
 * @author koseki
 *
 */
public interface JAutoRegexerSettings extends Plugable {
	public Object getSetting(String settingKey);
}

}}}

{{{
	getSettingメソッドは、引数に指定されたキー情報に関連するなんらかのオブジェクト
	を返却するメソッドです。
	
	JAutoregexer全体で、上記プラグインインタフェースを実装したプラグインを用いて設定情報のロードを行います。
	
	Memcached-Cacheプラグインも同様で、上記プラグインインタフェースを実装した形でサーバ接続情報を
	返すようにすることで、Memcached-Cacheプラグインに「どのサーバに接続するのか」を伝えます。
}}}

{{{
	JAutoRegexerSettingsプラグインインタフェースのgetSettingsメソッドでは、ただ一つの引数
	「settingKey」が存在しました。
	
	このsettingKeyによって、返却されるオブジェクトの型/値を変える仕組みです。
	settingKeyに対して、返却するオブジェクトが無い場合はnullを返却します。
	
	Memcached-Cacheプラグインから要求されるsettingKeyは以下の通りです
}}}
{{{
	・Memcached-Cacheプラグインによって要求されるsettingKey
	org.dyndns.nuda.tools.regex.plugins.cache.MemcachedRegexCache.property_key
}}}

{{{
	Memcached-Cacheプラグインのサーバ設定情報用プラグインを作成する場合は、
	上記のキーが指定された場合に値を返すように実装します。
	
	具体的には以下のような実装となります。
}}}

{{{ code java
package org.dyndns.nuda.tools.regex.plugins.cache;

import org.dyndns.nuda.logger.CommonLogger;
import org.dyndns.nuda.logger.LoggerAdaptor;
import org.dyndns.nuda.tools.regex.settings.JAutoRegexerSettingRepository;
import org.dyndns.nuda.tools.regex.settings.JAutoRegexerSettings;


public class DefaultMemcachedServerSettings implements
		JAutoRegexerSettings {

	private static LoggerAdaptor logger = CommonLogger.getLoggerAdaptor().getLogger("JAutoRegexerSettingInfo");
	
	@Override
	public Object getSetting(String settingKey) {
		if(MemcachedRegexCache.SERVER_INFO_PROPERTY_KEY.equals(settingKey)) {
			return new String[]{"localhost:11211", "localhost:11212"};
		}
		return null;
	}

	@Override
	public void init() {
		logger.debug("JAutoRegexer設定情報:[{}]をロードしました", this.getClass().getCanonicalName());
		JAutoRegexerSettingRepository.addSetting(this);
	}

}

}}}

{{{
	getSettingメソッドの具体的な返却値は、Stringの配列にします。
	
	また、それぞれの要素は
	「'サーバアドレス':'ポート番号'」
	のようにします。
	
	上記例では、ローカルマシンの11211/11212ポートで稼働しているMemcachedサーバに接続することを
	Memcached-Cacheプラグインに指示しています。
	
	
	例では、固定で値を返していますが、実際はデータベースの値から抽出したり、プロパティファイルやXMLファイルの値
	から返却値を生成して返すやり方が一般的でしょう。
	
}}}

{{{
	上記のようなクラスを作成したら、プラグイン化を行います。
	
	1) META-INF/services/org.dundns.nuda.tools.regex.settings.JAutoRegexerSettings
	   ファイルを作成します
	2) 1で作成したファイル内に「 org.dyndns.nuda.tools.regex.plugins.cache.DefaultMemcachedServerSettings」
	   の記述を追加します。
	
	※META-INFフォルダは、JVMが見える位置(クラスパス内)に配置する必要があります
}}}

{{{
	上記のように設定することによって、正規表現プロセッサのインスタンス化のタイミングで、自動的に
	設定情報がロードされます。
}}}