Na maioria das vezes, ao esperar para usar um novo comando Redis, você precisará aguardar uma versão atualizada do ServiceStack.Redis para adicionar suporte para os novos comandos da mesma forma, há momentos em que o Redis Client não oferece todas as permutações que o redis-server suporta.
Com o novo
Custom
e RawCommand
APIs em IRedisClient
e IRedisNativeClient
agora você pode usar o RedisClient para enviar seus próprios comandos personalizados que podem chamar comandos Adhoc Redis:public interface IRedisClient
{
...
RedisText Custom(params object[] cmdWithArgs);
}
public interface IRedisNativeClient
{
...
RedisData RawCommand(params object[] cmdWithArgs);
RedisData RawCommand(params byte[][] cmdWithBinaryArgs);
}
Essas APIs personalizadas usam um
object[]
flexível argumentos que aceitam qualquer valor serializável, por exemplo byte[]
, string
, int
bem como quaisquer tipos complexos definidos pelo usuário que são serializados de forma transparente como JSON e enviados pela rede como bytes 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"
Existem também métodos de extensão convenientes em
RedisData
e RedisText
que facilitam o acesso a dados estruturados, por exemplo: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"]
e mais alguns exemplos usando tipos complexos com as APIs personalizadas:
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
Essa API é usada na maioria das bibliotecas de cliente JavaScript redis.js da Redis React UI, onde os comandos do servidor Redis são disponibilizados por meio do serviço ServiceStack único:
public object Any(CallRedis request)
{
var args = request.Args.ToArray();
var response = new CallRedisResponse { Result = Redis.Custom(args) };
return response;
}