かばちんのエンジニアブログ

日々の経験の中で培った内容を備忘録も兼ねて記録していくブログです。少しでも誰かの役に立つために頑張って続けていけたらなと思います。

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を使う場面はほとんどないとは思いますが、
もし簡単に利用できるとしたらデバッグ機能なんかに役立つかもしれません。