2012-08-30 5 views
1

J'ai la CLI ouverte et une solution factices .NET ouverte. Je voudrais créer un utilisateur et insérer des données en une seule fois. Comment dans le CLI/REPL j'ai écrit ceciRedis: Comment i INCR et insérer?

redis 127.0.0.1:6379> incr userCount 
(integer) 1 
redis 127.0.0.1:6379> set user:1:name acid 
OK 
redis 127.0.0.1:6379> set user:1:pw zombie 
OK 

C'est bien, mais comment puis-je le faire en une fois? Ce serait bien si je pouvais obtenir l'ID utilisateur à la fin de l'opération mais vraiment je n'en ai pas besoin pour cet exemple et je voudrais pipeline les 3 commandes à la fois. Comment je fais ça? Aussi peut-être que je devrais le faire dans une transaction? Aussi, je devrais probablement vérifier si le nom existe avant d'insérer, mais je n'ai pas encore obtenu cela.

using BookSleeve; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace RedisEx 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      using (var conn = new RedisConnection("localhost")) 
      { 
       conn.Open(); 
       var userC = conn.Strings.Increment(1, "userCount"); 
       var userid = conn.Wait(userC); 
       if (userid > 1) 
       { 
        var sz = conn.Wait(conn.Strings.GetString(1, string.Format("user:{0}:name", userid - 1))); 
        Console.WriteLine(sz); 
       } 
       conn.Strings.Set(1, string.Format("user:{0}:name", userid), "acid"); 
       conn.Strings.Set(1, string.Format("user:{0}:pw", userid), "zombie"); 
      } 
     } 
    } 
} 
+0

Q: Est-ce que vous voulez écrire un script qui appelle les commandes client Redis-CLI, un client Redis-Booksleeve, ou "autre chose"? – paulsm4

+0

@ paulsm4: j'écrirais du code dans .NET. Mais si quelqu'un me dit la commande CLI je peux être en mesure de deviner/rechercher en utilisant. NET/booksleeve –

Répondre

1

S'il vous plaît consulter cet exemple C#:

Il illustre l'ajout d'enregistrements "expéditeurs" à une "liste" Redis. Remplacez simplement "utilisateur" par "expéditeur" et perdez "incr". Votre "compte" devient simplement le #/éléments dans la liste :)

L'exemple utilise ServiceStack au lieu de Booksleeve, mais les principes doivent être exactement les mêmes.

« espoir qui aide .. PSM

+0

'Count devient le nombre d'éléments dans la liste' est faux. ServiceStack crée en fait une clé derrière les scènes et exécute la commande 'incr' à chaque fois que' GetNextSequence' est appelé. L'utilisation du nombre d'éléments dans la liste pour générer des numéros de séquence a des problèmes de race –