sql >> データベース >  >> NoSQL >> Redis

Redisカスタムコマンド

    ほとんどの場合、新しいRedisコマンドの使用を待つときは、更新されたバージョンの ServiceStack.Redisを待つ必要があります。 同様に、新しいコマンドのサポートを追加するために、Redisクライアントがredis-serverがサポートするすべての順列を提供しない場合があります。

    新しいCustom およびRawCommand IRedisClientのAPI およびIRedisNativeClient これで、RedisClientを使用して、アドホック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[]stringint また、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 ReactUIのredis.jsJavaScriptクライアントライブラリのほとんどで使用されており、Redisサーバーコマンドは単一のServiceStackサービスを介して利用できます。

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

    1. PredisのMATCHオプションでSCANを使用する方法

    2. redisストリームのTTLを定義する方法は?

    3. 辞書<文字列、オブジェクト>からBsonDocumentへの変換(_tフィールドを省略)

    4. 複数のdjangoサイトがあるセロリ