Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Comandos personalizados do Redis


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;
}