24

I am looking for a very simple starter C# application for using StackExchange.Redis I have search over the web and found StackExchange.Redis

But this doesn't seems like a quick startup example.

I have setup redis on windows using StackExchange.Redis exe

Can anyone help me locate a simple C# application connecting with redis server and setting and getting some keys.

Aristos
  • 63,580
  • 14
  • 112
  • 146
hellowahab
  • 2,174
  • 4
  • 16
  • 31

2 Answers2

28

You can find C# examples in the readme file.

using StackExchange.Redis;
...

ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
// ^^^ store and re-use this!!!

IDatabase db = redis.GetDatabase();
string value = "abcdefg";
db.StringSet("mykey", value);
...
string value = db.StringGet("mykey");
Console.WriteLine(value); // writes: "abcdefg"
thepirat000
  • 10,774
  • 4
  • 38
  • 63
  • I also recommend you the [CachingFramework.Redis](https://github.com/thepirat000/CachingFramework.Redis) library that is built on top of SE.Redis and provides extra functionality like tagging mechanism, pluggable serialization and lot more. – thepirat000 Jan 24 '18 at 18:49
  • This is a bad example - the redis object is long-lived and example doesn't capture that – A X Jul 01 '20 at 20:39
  • 1
    @Abr you're right, so I've edited and added a comment to the code sample – thepirat000 Jul 02 '20 at 02:14
9

See the following code from their github sample:

 using (var muxer = ConnectionMultiplexer.Connect("localhost,resolvedns=1"))
        {
            muxer.PreserveAsyncOrder = preserveOrder;
            RedisKey key = "MBOA";
            var conn = muxer.GetDatabase();
            muxer.Wait(conn.PingAsync());

            Action<Task> nonTrivial = delegate
            {
                Thread.SpinWait(5);
            };
            var watch = Stopwatch.StartNew();
            for (int i = 0; i <= AsyncOpsQty; i++)
            {
                var t = conn.StringSetAsync(key, i);
                if (withContinuation) t.ContinueWith(nonTrivial);
            }
            int val = (int)muxer.Wait(conn.StringGetAsync(key));
            watch.Stop();

            Console.WriteLine("After {0}: {1}", AsyncOpsQty, val);
            Console.WriteLine("({3}, {4})\r\n{2}: Time for {0} ops: {1}ms; ops/s: {5}", AsyncOpsQty, watch.ElapsedMilliseconds, Me(),
                withContinuation ? "with continuation" : "no continuation", preserveOrder ? "preserve order" : "any order",
                AsyncOpsQty / watch.Elapsed.TotalSeconds);
        }
Ray Hayes
  • 14,395
  • 8
  • 50
  • 76
Kamran Shahid
  • 3,232
  • 3
  • 30
  • 70
  • 1
    Your link is 404 now... what is AsyncOpsQty? – Markus Jan 14 '19 at 15:31
  • https://github.com/StackExchange/StackExchange.Redis/blob/master/tests/StackExchange.Redis.Tests/MassiveOps.cs – Kamran Shahid Jan 15 '19 at 12:24
  • This is a bad example because the Connection Multiplexer object is LONG LIVED! It should not be used in this way – A X Jul 01 '20 at 20:39
  • 1
    Agreed. This is example was around 2015 when i have nearly first used it. Even the provided sample doesn't exists from which i have referred it .You are free to post a good example in the answer :) – Kamran Shahid Jul 02 '20 at 15:54
  • You also forgot to increase minimum worker thread pool count. – Tim Lovell-Smith Apr 23 '21 at 22:02
  • @TimLovell-Smith this post is at the time of .net framework related implenetation. I faced minimum thread pool related problem only in .net core type of appliction which i handled there separately – Kamran Shahid Apr 24 '21 at 10:45