ほとんどの場合、新しいRedisコマンドの使用を待つときは、更新されたバージョンの ServiceStack.Redisを待つ必要があります。 同様に、新しいコマンドのサポートを追加するために、Redisクライアントがredis-serverがサポートするすべての順列を提供しない場合があります。
新しいCustom
およびRawCommand
IRedisClient
のAPI およびIRedisNativeClient
これで、RedisClientを使用して、アドホックRedisコマンドを呼び出すことができる独自のカスタムコマンドを送信できます。
public interface IRedisClient
{
...
RedisText Custom(params object[] cmdWithArgs);
}
public interface IRedisNativeClient
{
...
RedisData RawCommand(params object[] cmdWithArgs);
RedisData RawCommand(params byte[][] cmdWithBinaryArgs);
}
これらのカスタムAPIは、柔軟なobject[]
を取ります シリアル化可能な値を受け入れる引数。例: byte[]
、string
、int
また、JSONとして透過的にシリアル化され、UTF-8バイトとしてネットワーク経由で送信されるユーザー定義の複合型。
var ret = Redis.Custom("SET", "foo", 1); // ret.Text = "OK"
byte[] cmdSet = Commands.Set;
ret = Redis.Custom(cmdSet, "bar", "b"); // ret.Text = "OK"
ret = Redis.Custom("GET", "foo"); // ret.Text = "1"
RedisData
には便利な拡張メソッドもあります およびRedisText
構造化データへのアクセスを容易にします。例:
var ret = Redis.Custom(Commands.Keys, "*");
var keys = ret.GetResults(); // keys = ["foo", "bar"]
ret = Redis.Custom(Commands.MGet, "foo", "bar");
var values = ret.GetResults(); // values = ["1", "b"]
Enum.GetNames(typeof(DayOfWeek)).ToList()
.ForEach(x => Redis.Custom(Commands.RPush, "DaysOfWeek", x));
ret = Redis.Custom(Commands.LRange, "DaysOfWeek", 1, -2);
var weekDays = ret.GetResults();
weekDays.PrintDump(); // ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]
カスタムAPIで複合型を使用したその他の例:
var ret = Redis.Custom(Commands.Set, "foo", new Poco { Name = "Bar" }); // ret.Text = "OK"
ret = Redis.Custom(Commands.Get, "foo"); // ret.Text = {"Name":"Bar"}
Poco dto = ret.GetResult<Poco>();
dto.Name.Print(); // Bar
このAPIは、Redis ReactUIのredis.jsJavaScriptクライアントライブラリのほとんどで使用されており、Redisサーバーコマンドは単一のServiceStackサービスを介して利用できます。
public object Any(CallRedis request)
{
var args = request.Args.ToArray();
var response = new CallRedisResponse { Result = Redis.Custom(args) };
return response;
}