AZ-Prolog ユーザーズマニュアル

## 9-8.Redisインターフェース

### 9-8-1.概要

主流になりつつある、KVS（key value store)方式のデータベースの一つRedisのインターフェースです。
インターフェースソースは次にあります。READMEもご参照ください。
${AZProlog}/share/azprolog/system/ext/redis

また、コンパイルされたダイナミックローディングライブラリは次です。
${AZProlog}/lib/azprolog/ext/redis.so

Redisを使ったサンプルプログラムは次にあります。
${AZProlog}/share/azprolog/sample/ext/redis.pl

### 9-8-2.Redisのインストール(Windows)

##### 1.次のサイトより、"hiredis.dll" "hiredis.lib" をダウンロードする

<64bit Windows> https://github.com/malkia/ufo/tree/master/bin/Windows/x64
<32bit Windows> https://github.com/malkia/ufo/tree/master/bin/Windows/x86

##### 2.hiredis(ソース)のWindows版をダウンロードし解凍

次のサイトより、hiredisのWindows版をダウンロードする(32bit,64bitとも同じ）。
https://github.com/texnician/hiredis-win32

##### 3.コンパイル環境の作成

前記ダウンロードした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:WindowsSystem32や %AZProlog% in など
パスが設定されているディレクトリにコピーする。

##### 4.コンパイル(Prolog用redisライブラリの作成)

本ディレクトリにあるMakefileを環境に合わせ書き換える。現在の内容は、前記＜例＞にそった場所が書かれている
nmakeを実行し、nmake installでインストールする。

##### 5.redis-server のダウンロードと起動

次のサイトより、Redis-Server をダウンロード、インストールする（32bit,64bit別のインストーラファイルがある）。

https://github.com/rgl/redis/downloads

[コントロールパネル]->[システムとセキュリティ]->[管理ツール]->[サービス] からRedis Server の開始をおこなう。

##### 6.テスト

prologを実行しredisテストを行う。

    > cd %AZProlog%sampleext
    > prolog -s redis.pl
    | ?- t.
    :
    (メッセージ表示)
    :

最後にOKが表示されれば正常終了です。

### 9-8-3.Redisのインストール(Linux)

##### 1.インストール

    $ 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

##### 2.動作確認

AZ-Prolog を立ち上げ、前記サンプルプログラムを読み込み、述語「t/0」を質問します。

    $ prolog  -s   /usr/local/share/azprolog/sample/ext/redis.pl
    | ?- t.

### 9-8-4.Redisのインストール(Mac)

##### 1.インストール

    $ sudo port install redis

AZ-Prolog のインストールにおいては、AZ-Prolog パッケージの解凍ディレクトリで次のコマンドを投入します。

    $ sudo make install_hiredis

または、websocket 、AZ-Prologのパッケージも同時にインストールするには

    $ sudo make install_full

### 9-8-5.インターフェース述語詳細

##### 1. redis_connect/4

redis_connect(+ADDRESS, +PORT, +TIMEOUT, -CONTEXT)

ADDRESS | 接続先IPアドレス/名前
PORT | 接続先ポート番号
TIMEOUT | 試行終了時間(msec.)
CONTEXT | 接続コンテキスト

redisサーバに接続し、コンテキストを返す。

##### 2. redis_free_context/1

redis_free_context(+CONTEXT)

CONTEXT | 接続コンテキスト

コンテキストを開放する。

##### 3. redis_is_disconnected/1

redis_is_disconnected(+CONTEXT)

CONTEXT | 接続コンテキスト

サーバが切断したかを調べる。
サーバから切断していれば成功、していなければ失敗する。
【重要】
この述語は、redis_commandを実行して、失敗した後で呼ばなければ意味がない。(正しい結果にならない)

##### 4. redis_command/4

redis_command(+CONTEXT, +COMMAND, -RETURN_TYPE, -RETURN_VALUE)

CONTEXT | 接続コンテキスト
COMMAND | 実行コマンド
RETURN_TYPE | 結果値の型
RETURN_VALUE | 結果値

指定したコマンドを実行する。
コマンドはアトム、文字列、リストのどれかで指定する。
アトム、文字列で指定した場合には、空白文字はredisコマンドと引数の間の区切り文字として認識される。(キー、値の中に空白を含めることができない。)
リスト(要素がアトムまたは文字列)で指定した場合には、アトム、文字列の中の空白はキー/値の一部分と見做される。(区切り文字のつもりでキー/値の前後に空白をつけるべきではない。)

|  | 例
--- | --- | ---
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"

##### 5. redis_command_hate_integer/4

redis_command_hate_integer(+CONTEXT, +COMMAND, -RETURN_TYPE, -RETURN_VALUE)

CONTEXT | 接続コンテキスト
COMMAND | 実行コマンド
RETURN_TYPE | 結果値の型
RETURN_VALUE | 結果値

redis_command/4 と殆ど同じ。
違いは、redis_REPLY_INTEGER型の値を返さない。(整数の場合には文字列にして返す)

##### 6. redis_version/1

redis_version(-VERSION)

VERSION | バージョン情報を示すアトム

＜例＞

    'redis-ext: 0.5, hiredis: 0.10.1'

▲