sql >> Database >  >> NoSQL >> Redis

Redis aangepaste opdrachten

Wanneer u wacht om een ​​nieuwe Redis-opdracht te gebruiken, moet u meestal wachten op een bijgewerkte versie van ServiceStack.Redis om ondersteuning toe te voegen voor de nieuwe commando's zijn er ook momenten waarop de Redis Client niet elke permutatie biedt die redis-server ondersteunt.

Met de nieuwe Custom en RawCommand API's op IRedisClient en IRedisNativeClient u kunt nu de RedisClient gebruiken om uw eigen aangepaste opdrachten te verzenden die adhoc Redis-opdrachten kunnen aanroepen:

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

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

Deze aangepaste API's nemen een flexibel object[] argumenten die elke serialiseerbare waarde accepteert, b.v. byte[] , string , int evenals alle door de gebruiker gedefinieerde complexe typen die transparant zijn geserialiseerd als JSON en over de draad worden verzonden als 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"

Er zijn ook handige uitbreidingsmethoden op RedisData en RedisText die het gemakkelijk maken om toegang te krijgen tot gestructureerde gegevens, bijvoorbeeld:

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

en nog enkele voorbeelden van het gebruik van complexe typen met de aangepaste API's:

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

Deze API wordt gebruikt in de meeste Redis React UI's redis.js JavaScript-clientbibliotheek waar Redis-serveropdrachten beschikbaar worden gemaakt via de enkele ServiceStack-service:

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

  1. Mongodb vinden in sub-array

  2. Hoe arrays van meerdere documenten samenvoegen in MongoDB?

  3. Jedis gebruiken om naar een specifiek slot / knooppunt in redis-cluster te schrijven

  4. Laravel Socket.io Verbonden maar geen gegevens ontvangen