UnityでRedisを使いたい場合に便利なTeamDev.Redis
Unity to Redis
果たして需要があるのか分かりませんが、、、
UnityからRedisに対してアクセスする方法を残したいと思います。
今回僕がUnityからRedisに接続するために利用したライブラリはTeamDev.Redisというものです。
TeamDev C# Redis Client - Home
基本的にはnugetで利用されるものだとは思うのですが、Unityで使うにはDLLさえ手に入ればいいので
ひとまずこのnupkgファイルをダウンロードして、nupkgファイルはただのzipファイルなので拡張子を書き換えて
強制的に解凍して、中に入っているTeamDev.Redis.dllを抜き出しました。
解凍して出来たファイル群の中にlibフォルダがあり、その中にnet20とnet40というフォルダがあります。
Unityは.NET3.5ベースで作られているので、net20フォルダに入っているTeamDev.Redis.dllを利用します。
Unityでの使い方
このDLLをどのように使うかですが、とても簡単です。
UnityのAssetsフォルダ配下にどこでもいいのでとりあえずDLLファイルを入れます。
そしたら下記のようなスクリプトを作ってカメラにでもアタッチすれば動いてくれます。
(もちろんRedisサーバが別に存在している前提です)
using UnityEngine; using TeamDev.Redis; public class RedisTest : MonoBehaviour { void Start () { var redis = new RedisDataAccessProvider (); redis.Configuration.Host = "192.168.***.***"; redis.Configuration.Port = 6379; redis.Connect (); redis.SendCommand (RedisCommand.SET, "key", "value"); redis.WaitComplete (); redis.SendCommand (RedisCommand.GET, "key"); var result = redis.ReadString (); Debug.Log("result = " + result); } }
Redisサーバの指定やポートの指定などは、Configurationクラスが保持されているようです。
Redisへのアクセスは基本的にはSendCommandメソッドで、
なんのコマンドを実行するのかをEnumで指定し、
そのあとに文字列パラメータを指定します。
値をSETする時はなんとなく分かりやすくて使いやすいんですが、
値をGETする時はSendCommandでGETを送ったあと、ReadString()メソッドで値を取得するという手順のようです。
なんとなくしっくりこないですね。
LISTの扱い方
SendCommand以外にもアクセスする方法はいくつか用意されています。
例えばRedisといえばLIST。
LISTをキーを指定して初期化する
redis.List["key"].Clear();
LISTにキーを指定して追加する
redis.List["key"].Append("value");
LISTのキーを指定して件数を取得する
var count = redis.List["key"].Count;
LISTからキーを指定して1要素を取得する
var value = redis.List["key"].LeftPop();
LISTをキーを指定して全要素を取得する
var values = redis.List["key"].Values;
HASHの扱い方
もちろんHASHだって使えます。
HASHにハッシュキーを指定して、キーと値をセットする
redis.Hash["hashKey"].Set("key", "value");
HASHにキーと値をセットする(すでにキーが存在する場合)
redis.Hash["hashKey"]["key"] = "value";
HASHからハッシュキーとキーを指定して値を取得する
var value = redis.Hash["hashKey"]["key"];
または
var value = redis.Hash["hashKey"].Get("key");
HASHからハッシュキーを指定してキーをすべて取得する
redis.Hash["hashKey"].Keys;
HASHからハッシュキーを指定して値をすべて取得する
redis.Hash["hashKey"].Values;
HASHからハッシュキーを指定してキーと値のペアをすべて取得する
redis.Hash["hashKey"].Items;
HASHにハッシュキーとキーを指定して存在するか調べる
redis.Hash["hashKey"].ContainsKey("key");
などなど、いろいろな使い方ができそうです。
最後に
UnityからRedisを使う場面はほとんどないとは思いますが、
もし簡単に利用できるとしたらデバッグ機能なんかに役立つかもしれません。