Redis
 sql >> база данни >  >> NoSQL >> Redis

Персонализирани команди на Redis

През повечето време, когато чакате да използвате нова команда Redis, ще трябва да изчакате актуализирана версия на ServiceStack.Redis за да добавите поддръжка за новите команди, също има моменти, когато Redis клиентът не предлага всяка пермутация, която redis-сървърът поддържа.

С новия Custom и RawCommand API на IRedisClient и IRedisNativeClient вече можете да използвате RedisClient, за да изпращате свои собствени персонализирани команди, които могат да извикват adhoc Redis команди:

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

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

Тези персонализирани API приемат гъвкав object[] аргументи, които приемат всяка сериализирана стойност, напр. byte[] , string , int както и всички потребителски дефинирани сложни типове, които са прозрачно сериализирани като JSON и се изпращат по кабела като 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"

Има и удобни методи за разширение на RedisData и RedisText които улесняват достъпа до структурирани данни, напр.:

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

и още няколко примера за използване на сложни типове с персонализираните API:

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

Този API се използва в повечето клиентска библиотека на Redis React UI на JavaScript клиентската библиотека на Redis, където сървърните команди на Redis са достъпни чрез единичната услуга ServiceStack:

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

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Laravel - Последователно изпълнение на задачи

  2. Memcached срещу Redis?

  3. Архитектура за Redis кеш и Mongo за постоянство

  4. Docker-compose , така или иначе, за да посочите redis.conf файл?

  5. Redis connect ECONNREFUSED 127.0.0.1:6379