sql >> Database teknologi >  >> NoSQL >> Redis

Redis brugerdefinerede kommandoer

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

  1. Asynkron udførelse af redis-kommandoer

  2. Hvad er __v-feltet i Mongoose

  3. mongoose/mongodb brugerdefineret sortering

  4. Hvordan oprettes forbindelse til Atlas M0 (Free Tier) klynge korrekt via Java-driver?