主流になりつつある、KVS(key value store)方式のデータベースの一つRedisのインターフェースです。
インターフェースソースは次にあります。READMEもご参照ください。
/usr/local/share/azprolog/system/ext/redis
また、コンパイルされたダイナミックローディングライブラリは次です。
/usr/local/lib/azprolog/ext/redis.so
Redisを使ったサンプルプログラムは次にあります。
/usr/local/share/azprolog/sample/ext/redis.pl
<64bit Windows> https://github.com/malkia/ufo/tree/master/bin/Windows/x64
<32bit Windows> https://github.com/malkia/ufo/tree/master/bin/Windows/x86
次のサイトより、hiredisのWindows版をダウンロードする(32bit,64bitとも同じ)。
https://github.com/texnician/hiredis-win32
前記ダウンロードしたhiredisのインクルードファイルとライブラリを任意の場所にコピーする。
ここでは、C:\redis を例としてあげる。
このなかに、include と lib のディレクトリを作成する。
[インクルードファイル]
2.でダウンロードしたredisソース内の "hiredis.h" 及び "adapters" をディレクトリごと include にコピー。
[ライブラリ]
1.でダウンロードしたライブラリ "hiredis.lib" を lib にコピー。
<ディレクトリ構成:例>
C:\redis\include\hiredis.h
| |
| \adapters
|
\lib\hiredis.lib
[ダイナミックリンクライブラリ]
1.でダウンロードしたダイナミックリンクライブラリ(hiredis.dll)を C:\Windows\System32や %AZProlog%\bin など
パスが設定されているディレクトリにコピーする。
本ディレクトリにあるMakefileを環境に合わせ書き換える。現在の内容は、前記<例>にそった場所が書かれている
nmakeを実行し、nmake installでインストールする。
次のサイトより、Redis-Server をダウンロード、インストールする(32bit,64bit別のインストーラファイルがある)。
https://github.com/rgl/redis/downloads
[コントロールパネル]->[システムとセキュリティ]->[管理ツール]->[サービス] からRedis Server の開始をおこなう。
> cd %AZProlog%\sample\ext > prolog -s redis.pl | ?- t. : (メッセージ表示) :
最後にOKが表示されれば正常終了です。
> sudo apt-get install redis-server > sudo apt-get install libhiredis-dev
AZ-Prolog のインストールにおいては、AZ-Prolog パッケージの解凍ディレクトリで次のコマンドを 投入します。
> sudo make install_hiredis
または、websocket 、AZ-Prologのパッケージも同時にインストールするには
> sudo make install_full
AZ-Prolog を立ち上げ、前記サンプルプログラムを読み込み、述語「t/0」を質問します。
$ prolog -s /usr/local/share/azprolog/sample/ext/redis.pl
| ?- t.
redis_connect(+ADDRESS, +PORT, +TIMEOUT, -CONTEXT)
ADDRESS | 接続先IPアドレス/名前 |
PORT | 接続先ポート番号 |
TIMEOUT | 試行終了時間(msec.) |
CONTEXT | 接続コンテキスト |
redisサーバに接続し、コンテキストを返す。
redis_free_context(+CONTEXT)
CONTEXT | 接続コンテキスト |
コンテキストを開放する。
redis_is_disconnected(+CONTEXT)
CONTEXT | 接続コンテキスト |
サーバが切断したかを調べる。
サーバから切断していれば成功、していなければ失敗する。
【重要】
この述語は、redis_commandを実行して、失敗した後で呼ばなければ意味がない。(正しい結果にならない)
redis_command(+CONTEXT, +COMMAND, -RETURN_TYPE, -RETURN_VALUE)
CONTEXT | 接続コンテキスト |
COMMAND | 実行コマンド |
RETURN_TYPE | 結果値の型 |
RETURN_VALUE | 結果値 |
指定したコマンドを実行する。
コマンドはアトム、文字列、リストのどれかで指定する。
アトム、文字列で指定した場合には、空白文字はredisコマンドと引数の間の区切り文字として認識される。(キー、値の中に空白を含めることができない。)
リスト(要素がアトムまたは文字列)で指定した場合には、アトム、文字列の中の空白はキー/値の一部分と見做される。(区切り文字のつもりでキー/値の前後に空白をつけるべきではない。)
<RETURN_TYPE> | <RETURN_VALUE> | 例 |
---|---|---|
redis_REPLY_STRING | string | "abc" |
redis_REPLY_ARRAY | list of value | ["200", "300", "aaa"] |
redis_REPLY_INTEGER | integer | 7 |
redis_REPLY_NIL | [] | [] |
redis_REPLY_STATUS | string | "OK" |
redis_REPLY_ERROR | string | "ERR wrong number of arguments for 'hgetall' command" |
redis_command_hate_integer(+CONTEXT, +COMMAND, -RETURN_TYPE, -RETURN_VALUE)
CONTEXT | 接続コンテキスト |
COMMAND | 実行コマンド |
RETURN_TYPE | 結果値の型 |
RETURN_VALUE | 結果値 |
redis_command/4と殆ど同じ。
違いは、redis_REPLY_INTEGER型の値を返さない。(整数の場合には文字列にして返す)
redis_version(-VERSION)
VERSION | バージョン情報を示すアトム |
例:
'redis-ext: 0.5, hiredis: 0.10.1'