What is it, naokirin?

Redis for Lua

またもRedisをいじってみました。

今回はLua


VC++Lua→Redis という謎な処理を通してやりましたが、基本的VC++Luaとのやり取りはLua C APIが全てを行っているので"Lua for Redis"というタイトル的にはあんまり必要ない感じは否めません。

というわけで、Redis-Luaを使ったWindowsからLinux上のRedisへのソケット通信についてを書くことにします。
とはいってもソケット通信は全部Redis-Luaにまる投げなんですが。


とりあえずRedis-Luahttps://github.com/nrk/redis-lua?locale=jaからダウソ。
で、必要だと書かれているのでhttp://www.tecgraf.puc-rio.br/~diego/professional/luasocket/からLuaSocketをダウソ。

LuaSocketはビルドしないといけないので、とりあえずVisual Studioでプロジェクトを開く。
プロジェクトのプロパティでリンカやC/C++のところをいろいろLua用に設定して、ビルド。

成功・・・・してない?

よくプロジェクトを見ると、謎のファイルが・・・
「『lua5.1.dll.lib』ってなんだ?こんなもんいらん」
といって削除。

――――ビルド成功。(あのファイルは消してホントによかったのかなぁ・・・)

というわけでこれでできたlibともともと入っていたスクリプトファイルを突っ込んでやっと自分のプロジェクトでプログラム書き書き。

プログラムを書いていざビルドするとエラーエラーエラーry)

来た来た!これでこそプログラムじゃー!

とか思いつつ、エラー内容的に「これディレクトリ指定間違ってんじゃね?」ということで確認。
リンカで指定するディレクトリの場所が間違っていたので修正して再度ビルド。

実行。

―――エラー。
「この人のアドレス、接続できないよ」


とりあえずいろいろいじる。

実行。

―――エラー。
「この人のアドレス、接続できないよ」

以下ループ。

―――――――ウォァァァァァァァァァァァァァァァァァァァァァァァァァァァッッッッッ!!

ということでいったん休憩。

その後考えてみて、まずRedisの設定を見てみました。

前回はなんとなくで動いていたので気がつかなかった点が今回明らかになりました。
それはredis.confファイルに"bind"という定義があり、そこに記述されているアドレスからRedisはlistenするというものでした。

はっきり言ってこんなことでアレだのコレだのいじっていた私はダメな気がします・・・。

この"bind"の部分に通信に使うIPアドレスを記述して、下のようなプログラムで通信してみました。

require 'redis'
-- connect関数でIPアドレスとポート番号を指定
local redis = Redis.connect('192.168.159.139', 6379)
local response = redis:ping()

print(response)

普通に動いてる・・・。
trueが帰ってくる・・・。

ということで感動。

他のコマンドは"redis:[コマンド](引数)"でできるようです。
日本語についても全然問題なく動いているので、大丈夫そうです。