memcachedCOM

INDEX

memcachedCOMとは?

memcachedCOMはmemcached用クライアントライブラリ(COM)です。

以下のようなことが可能です。

概要

以下に簡単な例を示します。

Sample.vbs

set o = createobject("memcachedCOM") o.open "192.168.xxx.xxx" '//--- '// ex1: Store a value. o("aaa") = "hello!!!" wscript.echo "aaa :" & o("aaa") o.delete("aaa") wscript.echo "aaa :" & o("aaa") '//--- '// ex2: Cached execute of ADODB.Command. set cmd = createobject("adodb.command"): cmd.activeconnection = "Provider=xxx..." cmd.commandtext = "select * from TTest" set rs = o(cmd) '// 1回目はSQL文を実行するが2回目からはキャッシュからrsを取得する do until rs.eof wscript.echo rs("sAAA"): rs.movenext loop o.close() '//--- '// ex3: Distributed library. set o = createobject("memcachedCOM.Distributed") o.open "192.168.xxx.1:11211,192.168.xxx.99:11211;192.168.xxx.2:11211,192.168.xxx.99:11211;", 0: o("bbb") = "hello!!!" wscript.echo "bbb :" & o("bbb") o.close()

[console output]

aaa :hello!!! aaa : DB001 DB002 DB003 DB004 DB005 bbb :hello!!!
動作環境
パッケージ内容
memcachedCOM.dll
memcachedCOMライブラリ本体
注意事項
  1. 本ソフトウェアの利用は良識の範囲内でお願い致します。
  2. 本ソフトウェアの利用による損害の保証はお受けできません。
  3. 本ソフトウェアの利用は楽しんで行っていただきますようお願い致します。
インストール方法
  1. "memcachedCOM.dll" をRegsvr32。
リファレンス
[ New Color ] [ Update Color ]
memcachedCOM Library
memcachedCOM
Interface
ImemcachedCOM
ProgID
memcachedCOM
NOM Name
memcachedCOM [default]
memcachedCOM.Distributed
Interface
ImemcachedCOM
ProgID
memcachedCOM.Distributed
NOM Name
memcachedCOM.Distributed [default]
ImemcachedCOM

memcachedサーバーと通信します。

プロパティ
Variant Item(Variant* pKey) [RW][default]

キャッシュする値をセット、取得します。
Set(...)Get(...) の代わりに利用できます。
pKey に ADODB.Command を渡して Item を取得すると Execute(...) が実行されます。

【例1】 o.Item("aaa") = "Hello!" wscript.echo o.Item("aaa") 【例2】 set cmd = createobject("ADODB.Command") cmd.activeConnection = "Provider=..." cmd.commandText = "select * from ..." set rs = o.Item(cmd)
メソッド
void Open(String sIP, long nPort=11211)
sIP
memcachedサーバーのIPアドレス。
nPort
memcachedサーバーのTCPポート。
戻り値
[なし]

memcachedサーバーへ接続します。

【 分散オブジェクト(memcachedCOM.Distributed)の場合 】

nPortに0を指定することでsIPに冗長化され、分散されたサーバー群を指定することができます。
複数台のmemcachedサーバーを指定することでサーバー不具合時にはコールドスタンバイが自動で利用されます。
また、sNameを元に記憶値をN台に分散してストアできます。
[sURL の記述方法]
{URL1},{URL1'};{URL2},{URL2'},...;|{PoolNum}
[例]
set o = createobject("memcachedCOM.Distributed"): o.Open "mc01.local:11211,mc99.local:11211;mc02.local:11211,mc99.local:11211;|20":
{URL1}
memcachedサーバー1台目
{URL1'}
memcachedサーバー1台目のコールドスタンバイ
{URL2}
memcachedサーバー2台目
{URL2'}
memcachedサーバー2台目のコールドスタンバイ
{PoolNum}
各サーバーへの接続をプールする最大数(Default:256)
void Close()
戻り値
[なし]

memcachedサーバーへの接続を解除します。

Bool IsOpen()
戻り値
接続しているか否か。

memcachedサーバーへ接続しているか否かを返します。

Bool TryOpen(String sIP, long nPort=11211)
sIP
memcachedサーバーのIPアドレス。
nPort
memcachedサーバーのTCPポート。
戻り値
接続に成功したか否か。

memcachedサーバーへ接続を試みます。
"Open(...)" とは違い、接続に失敗したりすでに接続されている場合でもエラーにはなりません。
接続に成功したか否かは戻り値で判断可能です。
接続の冗長化(コネクションプーリング)に利用可能です。

【例】memcachedサーバー3台で冗長化する場合 set o = createobject("memcachedCOM") o.tryOpen("192.168.1.101") '// サーバーダウンなどで失敗しても何も起こらない o.tryOpen("192.168.1.102") '// すでに接続されていれば何も起こらない o.tryOpen("192.168.1.103") '// すでに接続されていれば何も起こらない o("abc") = "ABC"
Bool TryClose()
戻り値
接続解除に成功したか否か。

memcachedサーバーへ接続を解除を試みます。
"Close(...)" とは違い、解除に失敗したりすでに解除されている場合でもエラーにはなりません。
解除に成功したか否かは戻り値で判断可能です。

void Set(String sKey, Variant* pValue, long nExptime=0)
sKey
キャッシュされる値に付けるキー。
pValue
キャッシュされる値。
nExptime
有効期限(秒)。
戻り値
[なし]

memcached に set コマンドを送ります。

【 分散オブジェクト(memcachedCOM.Distributed)の場合 】

sKeyから得られたHash値を元にコマンドを送るサーバーが決定されます。
void Add(String sKey, Variant* pValue, long nExptime=0)
sKey
キャッシュされる値に付けるキー。
pValue
キャッシュされる値。
nExptime
有効期限(秒)。
戻り値
[なし]

memcached に add コマンドを送ります。

【 分散オブジェクト(memcachedCOM.Distributed)の場合 】

sKeyから得られたHash値を元にコマンドを送るサーバーが決定されます。
void Replace(String sKey, Variant* pValue, long nExptime=0)
sKey
キャッシュされる値に付けるキー。
pValue
キャッシュされる値。
nExptime
有効期限(秒)。
戻り値
[なし]

memcached に replace コマンドを送ります。

【 分散オブジェクト(memcachedCOM.Distributed)の場合 】

sKeyから得られたHash値を元にコマンドを送るサーバーが決定されます。
Variant Get(String sKey)
sKey
キャッシュされている値に付けられたキー。
戻り値
キャッシュされていた値。

memcached に get コマンドを送ります。
存在しなかった場合 Empty が返ります。

【 分散オブジェクト(memcachedCOM.Distributed)の場合 】

sKeyから得られたHash値を元にコマンドを送るサーバーが決定されます。
void Delete(String sKey)
sKey
キャッシュされている値に付けられたキー。
戻り値
[なし]

memcached に delete コマンドを送ります。

【 分散オブジェクト(memcachedCOM.Distributed)の場合 】

sKeyから得られたHash値を元にコマンドを送るサーバーが決定されます。
Variant Gets(String sKey, Variant* pCasUnique)
sKey
キャッシュされている値に付けられたキー。
pCasUnique
メソッドが成功すると cas unique値 が入ります。
戻り値
キャッシュされていた値。

memcached に gets コマンドを送ります。
存在しなかった場合 Empty が返ります。

【例】 value = o.Gets("aaa", cu) value = value & "!!!" o.Cas "aaa", cu, value

【 分散オブジェクト(memcachedCOM.Distributed)の場合 】

sKeyから得られたHash値を元にコマンドを送るサーバーが決定されます。
void Cas(String sKey, Variant* pCasUnique, Variant* pValue, long nExptime=0)
sKey
キャッシュされている値に付けられたキー。
pCasUnique
Gets で得られた cas unique値。
pValue
キャッシュされる値。
nExptime
有効期限(秒)。
戻り値
[なし]

memcached に cas コマンドを送ります。

【例】 value = o.Gets("aaa", cu) value = value & "!!!" o.Cas "aaa", cu, value

【 分散オブジェクト(memcachedCOM.Distributed)の場合 】

sKeyから得られたHash値を元にコマンドを送るサーバーが決定されます。
Variant Stats(String sType="")
sType
取得する統計情報の型。
戻り値
統計情報の入ったDictionary。

memcached に stats コマンドを送ります。
対応している統計情報は "","slabs","items" のいずれかです。

【例】 aHosts = Array("192.168.1.101", "192.168.1.102", "192.168.1.103") for each sHost in aHosts if o.tryOpen(sHost) then set s = o.stats() wscript.echo "Alive:" & s("pid") else wscript.echo "DEAD!!!" end if o.tryClose() next

【 分散オブジェクト(memcachedCOM.Distributed)の場合 】

実装されていません。"memcachedCOM.Distributed"ではなく"memcachedCOM"をご利用ください。
Object Execute(Object pCommand, String sKey="", long nExptime=0)
pCommand
Executeのための準備が整った ADODB.Command オブジェクト。
sKey
キャッシュされる ADODB.Recordset に付けるキー。
空文字列("")を指定すると pCommand を元に自動でキーを内部的に生成します。
nExptime
有効期限(秒)。
戻り値
ADODB.Recordset オブジェクト。

キャッシュされた Recordset を取得します。
まだキャッシュされていない場合には pCommand を Execute してキャッシュを作成します。

【例】 set cmd = createobject("ADODB.Command") cmd.activeConnection = "Provider=..." cmd.commandText = "select * from ..." set rs = o.Execute(cmd) do until rs.EOF '// ... rs.moveNext loop

【 分散オブジェクト(memcachedCOM.Distributed)の場合 】

sKeyから得られたHash値を元にコマンドを送るサーバーが決定されます。
更新履歴
2009/05/22
  • Version: 1.0.0.0
2009/07/08
  • Version: 1.4.1.0
  • ImemcachedCOM.IsOpen(...) 追加
  • ImemcachedCOM.TryOpen(...) 追加
  • ImemcachedCOM.TryClose(...) 追加
  • ImemcachedCOM.Stats(...) 追加
2010/04/21
  • Version: 1.4.3.0
  • ExecuteのRecordsetキャッシュが間違う場合がある問題対処
  • x64対応
2010/11/10
  • Version: 1.4.5.0
  • memcachedサーバーから大きいデータを取得する際の不具合解消
  • aRes Stack エラー の解消
2011/03/17
  • Version: 2.5.5.0
  • memcachedCOM.Distributed の追加