Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Polecenia niestandardowe Redis

W większości przypadków, czekając na użycie nowego polecenia Redis, musisz poczekać na zaktualizowaną wersję ServiceStack.Redis aby dodać obsługę nowych poleceń, zdarzają się sytuacje, w których klient Redis nie oferuje wszystkich permutacji obsługiwanych przez serwer redis.

Z nowym Custom i RawCommand Interfejsy API w IRedisClient i IRedisNativeClient możesz teraz używać RedisClient do wysyłania własnych niestandardowych poleceń, które mogą wywoływać polecenia Redis adhoc:

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

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

Te niestandardowe interfejsy API przyjmują elastyczny object[] argumenty, które akceptują dowolną serializowalną wartość, np. byte[] , string , int jak również wszelkie zdefiniowane przez użytkownika typy złożone, które są transparentnie serializowane jako JSON i przesyłane przez sieć jako UTF-8 bajtów.

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"

Istnieją również wygodne metody rozszerzeń w RedisData i RedisText które ułatwiają dostęp do uporządkowanych danych, np.:

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

i kilka innych przykładów użycia typów złożonych z niestandardowymi interfejsami 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

Ten interfejs API jest używany w większości biblioteki klienta Redis React UI JavaScript redis.js, w której polecenia serwera Redis są udostępniane za pośrednictwem pojedynczej usługi 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. Jaka jest różnica między obszarem a BoundingBox z kodu źródłowego Redis?

  2. Redis i wartości zapytań

  3. Limit czasu wykonywania SET {Klucz}, inst:0, mgr:Nieaktywny, kolejka:2, qu=1, qs=1, qc=0, wr=1/1, in=0/0

  4. Jaka jest różnica między metodą HSET a HMSET w bazie danych redis

  5. Jak Redis może sortować według dwóch różnych posortowanych zestawów?