sql >> Base de Datos >  >> NoSQL >> Redis

Comandos personalizados de Redis

La mayoría de las veces, cuando espera usar un nuevo comando de Redis, deberá esperar una versión actualizada de ServiceStack.Redis. para agregar soporte para los nuevos comandos, del mismo modo, hay ocasiones en las que el cliente Redis no ofrece todas las permutaciones que admite el servidor redis.

Con el nuevo Custom y RawCommand API en IRedisClient y IRedisNativeClient ahora puede usar RedisClient para enviar sus propios comandos personalizados que pueden llamar comandos adhoc Redis:

public interface IRedisClient
{
    ...
    RedisText Custom(params object[] cmdWithArgs);
}

public interface IRedisNativeClient
{
    ...
    RedisData RawCommand(params object[] cmdWithArgs);
    RedisData RawCommand(params byte[][] cmdWithBinaryArgs);
}

Estas API personalizadas toman un object[] flexible argumentos que aceptan cualquier valor serializable, p. byte[] , string , int así como cualquier tipo complejo definido por el usuario que se serialice de forma transparente como JSON y se envíe por cable 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"

También hay métodos de extensión convenientes en RedisData y RedisText que facilitan el acceso a datos estructurados, por ejemplo:

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"]

y algunos ejemplos más usando tipos complejos con las API 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

Esta API se utiliza en la mayoría de las bibliotecas cliente de JavaScript redis.js de Redis React UI, donde los comandos del servidor Redis están disponibles a través del único servicio ServiceStack:

public object Any(CallRedis request)
{
    var args = request.Args.ToArray();
    var response = new CallRedisResponse { Result = Redis.Custom(args) };
    return response;
}