Redis
 sql >> Base de données >  >> NoSQL >> Redis

Commandes personnalisées Redis

La plupart du temps, lorsque vous attendez pour utiliser une nouvelle commande Redis, vous devrez attendre une version mise à jour de ServiceStack.Redis pour ajouter la prise en charge des nouvelles commandes, il arrive également que le client Redis n'offre pas toutes les permutations prises en charge par redis-server.

Avec le nouveau Custom et RawCommand API sur IRedisClient et IRedisNativeClient vous pouvez maintenant utiliser RedisClient pour envoyer vos propres commandes personnalisées pouvant appeler des commandes Redis ad hoc :

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

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

Ces API personnalisées prennent un object[] flexible arguments qui acceptent n'importe quelle valeur sérialisable, par ex. byte[] , string , int ainsi que tous les types complexes définis par l'utilisateur qui sont sérialisés de manière transparente en tant que JSON et envoyés sur le réseau en tant qu'octets 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"

Il existe également des méthodes d'extension pratiques sur RedisData et RedisText qui facilitent l'accès aux données structurées, par exemple :

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

et quelques autres exemples utilisant des types complexes avec les API personnalisées :

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

Cette API est utilisée dans la plupart des bibliothèques client JavaScript redis.js de Redis React UI, où les commandes du serveur Redis sont mises à disposition via le service ServiceStack unique :

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