Det meste af tiden, når du venter på at bruge en ny Redis Command, skal du vente på en opdateret version af ServiceStack.Redis for at tilføje understøttelse af de nye kommandoer er der også tidspunkter, hvor Redis-klienten ikke tilbyder alle de permutationer, som Redis-serveren understøtter.
Med den nye Custom
og RawCommand
API'er på IRedisClient
og IRedisNativeClient
du kan nu bruge RedisClienten til at sende dine egne brugerdefinerede kommandoer, der kan kalde adhoc Redis-kommandoer:
public interface IRedisClient
{
...
RedisText Custom(params object[] cmdWithArgs);
}
public interface IRedisNativeClient
{
...
RedisData RawCommand(params object[] cmdWithArgs);
RedisData RawCommand(params byte[][] cmdWithBinaryArgs);
}
Disse brugerdefinerede API'er tager et fleksibelt object[]
argumenter, som accepterer enhver serialiserbar værdi, f.eks. byte[]
, string
, int
samt alle brugerdefinerede komplekse typer, som er transparent serialiseret som JSON og sendes over ledningen som UTF-8 bytes.
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"
Der er også praktiske udvidelsesmetoder på RedisData
og RedisText
der gør det nemt at få adgang til strukturerede data, f.eks.:
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"]
og nogle flere eksempler på brug af komplekse typer med brugerdefinerede API'er:
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
Denne API bruges i det meste af Redis React UI's redis.js JavaScript-klientbibliotek, hvor Redis-serverkommandoer gøres tilgængelige via den enkelte ServiceStack-tjeneste:
public object Any(CallRedis request)
{
var args = request.Args.ToArray();
var response = new CallRedisResponse { Result = Redis.Custom(args) };
return response;
}