Пример #1
0
 public override void Init(IConfiguration configuration)
 {
     if (RedisManagerPool == null)
     {
         RedisManagerPool = new RedisManagerPool(configuration.GetConnectionString("RedisConnection"));
     }
 }
Пример #2
0
    public void Execute()
    {
        LogManager.LogFactory = new ConsoleLogFactory();

        Licensing.RegisterLicense("<removed>");

        var redisManagerPool = new RedisManagerPool("redis://redisHost?db=7");

        for (int i = 0; i < 5; i++)
        {
            try
            {
                using (IRedisClient client = redisManagerPool.GetClient())
                {
                    string value = client.GetValue("status");

                    Console.WriteLine($"Successfully retrieved value => '{value}'");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Exception handled \n{ex}");
            }

            Console.WriteLine("Sleeping for 25 seconds to allow client to be garbage collected");
            Thread.Sleep(TimeSpan.FromSeconds(25));
        }
    }
Пример #3
0
        public void Execute(string ipAddress, int noOfThreads = 64)
        {
            redisManager = new RedisManagerPool(new[] { ipAddress }, new RedisPoolConfig {
                MaxPoolSize = noOfThreads
            });

            var StartedAt = DateTime.UtcNow;

            Interlocked.Increment(ref running);

            "Starting HashStressTest with {0} threads".Print(noOfThreads);
            var threads = new List <Thread>();

            for (int i = 0; i < noOfThreads; i++)
            {
                threads.Add(new Thread(WorkerLoop));
            }
            threads.ForEach(t => t.Start());

            "Press Enter to Stop...".Print();
            Console.ReadLine();

            Interlocked.Decrement(ref running);

            "Writes: {0}, Reads: {1}".Print(writeCount, readCount);
            "{0} EndedAt: {1}".Print(GetType().Name, DateTime.UtcNow.ToLongTimeString());
            "{0} TimeTaken: {1}s".Print(GetType().Name, (DateTime.UtcNow - StartedAt).TotalSeconds);

            //Uncomment to wait for all threads to finish
            //threads.Each(t => t.Join());

            "\nPress Enter to Quit...".Print();
            Console.ReadLine();
        }
        public IActionResult Index()
        {
            try
            {
                var ip = Environment.GetEnvironmentVariable("redisip");
                _logger.LogCritical("ip = " + ip);
                var manager = new RedisManagerPool($"{ip}:6379");
                _logger.LogCritical("After RedisManagerPool");

                using (var client = manager.GetClient())
                {
                    _logger.LogCritical("After GetClient");

                    client.Set("foo", "bar");

                    ViewData["cachedvalue"] = client.Get <string>("foo");

                    _logger.LogCritical("foo={0}", client.Get <string>("foo"));

                    _logger.LogCritical("Set/Get Succeeded");
                }
            }
            catch (Exception ex)
            {
                _logger.LogCritical($"Exception: {ex.Message + Environment.NewLine + ex.StackTrace}");
            }

            return(View());
        }
Пример #5
0
        private void RedisUpload(string blobName, string localFile)
        {
            var redisClient = new RedisManagerPool(_config["RedisStorage:ConnectionString"])
                              .GetClient();

            redisClient.Set(blobName, System.IO.File.ReadAllBytes(localFile));
        }
        private IRedisClient GetRedisClient()
        {
            var conString = _config.GetValue <String>("Redis:ConnectionString");
            var manager   = new RedisManagerPool(conString);

            return(manager.GetClient());
        }
Пример #7
0
        public static void StartDemo()
        {
            var redisManger = new RedisManagerPool("127.0.0.1:6379");      //Redis的连接字符串
            var redis       = redisManger.GetClient();                     //获取一个Redis Client
            var redisTodos  = redis.As <Todo>();
            var newTodo     = new Todo                                     //实例化一个Todo类
            {
                Id      = redisTodos.GetNextSequence(),
                Content = "Learn Redis",
                Order   = 1,
            };

            redisTodos.Store(newTodo);                                    //把newTodo实例保存到数据库中    增
            Todo saveTodo = redisTodos.GetById(newTodo.Id);               //根据Id查询        查

            "Saved Todo: {0}".Print(saveTodo.Dump());

            saveTodo.Done = true;                                         //改
            redisTodos.Store(saveTodo);

            var updateTodo = redisTodos.GetById(newTodo.Id);            //查

            "Updated Todo: {0}".Print(updateTodo.Dump());

            redisTodos.DeleteById(newTodo.Id);                           //删除

            var remainingTodos = redisTodos.GetAll();

            "No more Todos:".Print(remainingTodos.Dump());

            Console.ReadLine();
        }
        public void ConfigureServices(IServiceCollection services)
        {
            var redisEndpointUrl = (Environment.GetEnvironmentVariable("REDIS_ENDPOINT_URL") ?? "127.0.0.1:6379").Split(':');
            var redisHost        = redisEndpointUrl[0];
            var redisPort        = redisEndpointUrl[1];

            string redisConnectionUrl = string.Empty;
            var    redisPassword      = Environment.GetEnvironmentVariable("REDIS_PASSWORD");

            if (redisPassword != null)
            {
                redisConnectionUrl = $"{redisPassword}@{redisHost}:{redisPort}";
            }
            else
            {
                redisConnectionUrl = $"{redisHost}:{redisPort}";
            }

            var redisManager = new RedisManagerPool(redisConnectionUrl);
            var redis        = redisManager.GetClient();

            services.AddSingleton(redis);

            Assembly.Load("BasicRedisLeaderboardDemoDotNetCore.BLL");
            ServiceAutoConfig.Configure(services);

            services.AddControllers();

            services.AddSpaStaticFiles(configuration =>
            {
                configuration.RootPath = "ClientApp/dist";
            });
        }
Пример #9
0
        private static IRedisClient GetRedisClient()
        {
            string redisIp = Dns.GetHostAddressesAsync("docker_redis_1").Result.FirstOrDefault().ToString();
            var    manager = new RedisManagerPool(redisIp);

            return(manager.GetClient());
        }
        public void Can_have_different_pool_size_and_host_configurations()
        {
            var writeHosts = new[] { "readwrite1" };

            using (var manager = new RedisManagerPool(
                       writeHosts,
                       new RedisPoolConfig {
                MaxPoolSize = 4
            })
            {
                RedisClientFactory = mockFactory.Object,
            }
                   )
            {
                //A poolsize of 4 will not block getting 4 clients
                using (var client1 = manager.GetClient())
                    using (var client2 = manager.GetClient())
                        using (var client3 = manager.GetClient())
                            using (var client4 = manager.GetClient())
                            {
                                AssertClientHasHost(client1, writeHosts[0]);
                                AssertClientHasHost(client2, writeHosts[0]);
                                AssertClientHasHost(client3, writeHosts[0]);
                                AssertClientHasHost(client4, writeHosts[0]);
                            }

                mockFactory.VerifyAll();
            }
        }
Пример #11
0
        public IRedisClient Create(RedisSettings settings)
        {
            RedisManagerPool client = null;

            Lock.EnterUpgradeableReadLock();
            try
            {
                if (Cache.TryGetValue(settings.Signature, out client) == false)
                {
                    Lock.EnterWriteLock();
                    try
                    {
                        if (Cache.TryGetValue(settings.Signature, out client) == false)
                        {
                            client = new RedisManagerPool(settings.Hosts.ToArray());

                            Cache[settings.Signature] = client;
                        }
                    }
                    finally
                    {
                        Lock.ExitWriteLock();
                    }
                }
            }
            finally
            {
                Lock.ExitUpgradeableReadLock();
            }

            return(client.GetClient());
        }
Пример #12
0
        public void RedisManagerPool_alternates_hosts()
        {
            using (var redisManager = new RedisManagerPool(Config.MasterHosts)) {
                using (var master = redisManager.GetClient()) {
                    Assert.That(master.GetHostString(), Is.EqualTo(Config.Sentinel6380));
                    master.SetValue("KEY", "1");
                }

                using (var master = redisManager.GetClient()) {
                    Assert.That(master.GetHostString(), Is.EqualTo(Config.Sentinel6380));
                    master.Increment("KEY", 1);
                }

                for (var i = 0; i < 5; i++)
                {
                    using (var readOnly = redisManager.GetReadOnlyClient()) {
                        Assert.That(readOnly.GetHostString(), Is.EqualTo(Config.Sentinel6380));
                        Assert.That(readOnly.GetValue("KEY"), Is.EqualTo("2"));
                    }
                }

                using (var cache = redisManager.GetCacheClient()) {
                    Assert.That(cache.Get <string>("KEY"), Is.EqualTo("2"));
                }
            }
        }
Пример #13
0
        public T Get <T>(string key)
        {
            var redisUrl = _configuration["RedisUrl"];

            using (var client = new RedisManagerPool(redisUrl).GetClient())
                return(client.Get <T>(key));
        }
Пример #14
0
        public static void Start()
        {
            var redisMangement = new RedisManagerPool("127.0.0.1:6379");
            var client         = redisMangement.GetClient();

            //队列的使用   //先进先出
            client.EnqueueItemOnList("name", "zhangsan");   //入列
            client.EnqueueItemOnList("name", "lisi");       //入列
            long count = client.GetListCount("name");

            for (int i = 0; i < count; i++)
            {
                Console.WriteLine(client.DequeueItemFromList("name"));   //出列
            }


            //栈的使用 //先进后出
            client.PushItemToList("name2", "wangwu");          //推入
            client.PushItemToList("name2", "maliu");           //推入
            long count2 = client.GetListCount("name2");

            for (int i = 0; i < count2; i++)
            {
                Console.WriteLine(client.PopItemFromList("name2"));   //弹出
            }
        }
Пример #15
0
        public void Remove(string key)
        {
            var redisUrl = _configuration["RedisUrl"];

            using (var client = new RedisManagerPool(redisUrl).GetClient())
                client.Remove(key);
        }
Пример #16
0
        public void Set(string key, object result)
        {
            var redisUrl = _configuration["RedisUrl"];

            using (var client = new RedisManagerPool(redisUrl).GetClient())
                client.Set(key, result, System.DateTime.Now.AddMinutes(int.Parse(_configuration["TokenExpireMin"])));
        }
Пример #17
0
        public IActionResult Index(string vote)
        {
            string EndPoint = configuration.GetSection("REDIS").Value;
            var    manager = new RedisManagerPool(EndPoint);
            string cats, dogs;

            ViewBag.value1 = 0;
            ViewBag.value2 = 0;
            if (vote.Equals("reset"))
            {
                using (var client = manager.GetClient())
                {
                    client.Set("Cats", 0);
                    client.Set("Dogs", 0);
                }
            }
            else
            {
                using (var client = manager.GetClient())
                {
                    client.IncrementValue(vote);
                    cats = client.Get <string>("Cats");
                    dogs = client.Get <string>("Dogs");
                    if (cats != null)
                    {
                        ViewBag.value1 = cats;
                    }
                    if (dogs != null)
                    {
                        ViewBag.value2 = dogs;
                    }
                }
            }
            return(View());
        }
Пример #18
0
        public IActionResult Index()
        {
            string EndPoint = configuration.GetSection("REDIS").Value;
            var    manager  = new RedisManagerPool(EndPoint);

            ViewBag.value1 = 0;
            ViewBag.value2 = 0;
            string cats, dogs;

            using (var client = manager.GetClient())
            {
                cats = client.Get <string>("Cats");
                dogs = client.Get <string>("Dogs");
                if (cats != null)
                {
                    ViewBag.value1 = cats;
                }
                if (dogs != null)
                {
                    ViewBag.value2 = dogs;
                }
            }

            return(View());
        }
Пример #19
0
        public static void Main(string[] args)
        {
            DoRedisString drs = new DoRedisString();

            drs.Append("nick", " is bad guy");
            string nick = drs.Get("nick");

            Console.WriteLine(nick);
            var redisManager = new RedisManagerPool("localhost:6379");

            using (var client = redisManager.GetClient())
            {
                var redisTodos = client.As <Todo>();
                var newTodo    = new Todo
                {
                    Id      = redisTodos.GetNextSequence(),
                    Content = "Learn Redis",
                    Order   = 1,
                };
                redisTodos.Store(newTodo);
                Todo savedTodo = redisTodos.GetById(newTodo.Id);
                "Saved Todo: {0}".Print(savedTodo.Dump());

                savedTodo.Done = true;
                redisTodos.Store(savedTodo);

                var updatedTodo = redisTodos.GetById(newTodo.Id);
                "Updated Todo: {0}".Print(updatedTodo.Dump());

                redisTodos.DeleteById(newTodo.Id);

                var remainingTodos = redisTodos.GetAll();
                "No more Todos:".Print(remainingTodos.Dump());
            }
        }
Пример #20
0
        public LocationsService()
        {
            var redisManager = new RedisManagerPool();
            var redisClient  = redisManager.GetClient();

            redisLocations = redisClient.As <Location>();
        }
Пример #21
0
        public void Does_set_all_properties_on_Client_using_ClientsManagers()
        {
            var connStr =
                "redis://*****:*****@host:1?ssl=true&db=0&connectTimeout=2&sendtimeout=3&receiveTimeout=4&idletimeoutsecs=5&NamespacePrefix=prefix.";
            var expected = new RedisEndpoint {
                Host            = "host",
                Port            = 1,
                Ssl             = true,
                Client          = "nunit",
                Password        = "******",
                Db              = 0,
                ConnectTimeout  = 2,
                SendTimeout     = 3,
                ReceiveTimeout  = 4,
                IdleTimeoutSecs = 5,
                NamespacePrefix = "prefix."
            };

            using (var pooledManager = new RedisManagerPool(connStr)) {
                AssertClientManager(pooledManager, expected);
            }

            using (var pooledManager = new PooledRedisClientManager(connStr)) {
                AssertClientManager(pooledManager, expected);
            }

            using (var basicManager = new BasicRedisClientManager(connStr)) {
                AssertClientManager(basicManager, expected);
            }
        }
Пример #22
0
        public void Does_not_throw_when_using_different_clients_on_same_Thread()
        {
            RedisConfig.AssertAccessOnlyOnSameThread = true;
            InvalidAccessException poolEx = null;

            using (var redisManager = new RedisManagerPool(Config.MasterHost)) {
                using (var redis = redisManager.GetClient()) {
                    var threadId = Thread.CurrentThread.ManagedThreadId.ToString();
                    var key      = $"Thread#{threadId}";
                    redis.SetValue(key, threadId);

                    ThreadPool.QueueUserWorkItem(_ => {
                        try {
                            using (var poolRedis = redisManager.GetClient()) {
                                var poolThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                                var poolKey      = $"Thread#{poolThreadId}";
                                poolRedis.SetValue(poolKey, poolThreadId);

                                Console.WriteLine("From Pool: " + poolRedis.GetValue(poolKey));
                            }
                        } catch (InvalidAccessException ex) {
                            poolEx = ex;
                        }
                    });

                    Thread.Sleep(100);

                    Console.WriteLine("From Test: " + redis.GetValue(key));
                }
            }

            Console.WriteLine(poolEx);

            RedisConfig.AssertAccessOnlyOnSameThread = false;
        }
Пример #23
0
        public void RedisManagerPool_alternates_hosts()
        {
            using (var redisManager = new RedisManagerPool(MasterHosts))
            {
                using (var master = redisManager.GetClient())
                {
                    Assert.That(master.GetHostString(), Is.EqualTo(MasterHosts[0]));
                    master.SetValue("KEY", "1");
                }
                using (var master = redisManager.GetClient())
                {
                    Assert.That(master.GetHostString(), Is.EqualTo(MasterHosts[0]));
                    master.Increment("KEY", 1);
                }

                5.Times(i =>
                {
                    using (var readOnly = redisManager.GetReadOnlyClient())
                    {
                        Assert.That(readOnly.GetHostString(), Is.EqualTo(MasterHosts[0]));
                        Assert.That(readOnly.GetValue("KEY"), Is.EqualTo("2"));
                    }
                });

                using (var cahce = redisManager.GetCacheClient())
                {
                    Assert.That(cahce.Get <string>("KEY"), Is.EqualTo("2"));
                }
            }
        }
Пример #24
0
        public void Execute()
        {
            const int noOfThreads = 64;

            this.RedisManager = new RedisManagerPool(Config.MasterHost, new RedisPoolConfig {
                MaxPoolSize = noOfThreads
            });

            var startedAt = DateTime.UtcNow;

            Interlocked.Increment(ref this._running);

            Console.WriteLine("Starting HashStressTest with {0} threads", noOfThreads);

            var threads = new List <Thread>();

            for (var i = 0; i < noOfThreads; i++)
            {
                threads.Add(new Thread(this.WorkerLoop));
            }

            threads.ForEach(t => t.Start());

            Interlocked.Decrement(ref this._running);

            Console.WriteLine("Writes: {0}, Reads: {1}", this._writeCount, this._readCount);
            Console.WriteLine("{0} EndedAt: {1}", this.GetType().Name, DateTime.UtcNow.ToLongTimeString());
            Console.WriteLine("{0} TimeTaken: {1}s", this.GetType().Name, (DateTime.UtcNow - startedAt).TotalSeconds);

            threads.ForEach(t => t.Join());
        }
Пример #25
0
 public void UpdateLike()
 {
     var clientsManager = new RedisManagerPool(RedisIP + ":" + RedisPort);
     var redisPubSub    = new RedisPubSubServer(clientsManager, "recordlike")
     {
         OnMessage = (channel, message) => {
             string[] strs     = message.Split('|');
             string   userid   = strs[1];
             string   recordid = strs[0].TrimStart('r');
             var      like     = _db.RecordLikes.FirstOrDefault(t => t.CommentUserId == userid && t.RecordId == recordid);
             if (like == null)
             {
                 like = new RecordLike();
                 like.CommentUserId = userid;
                 like.RecordId      = recordid;
                 like.CreateTime    = DateTime.Now;
                 like.IsCancel      = false;
                 _db.RecordLikes.Add(like);
             }
             else if (Convert.ToBoolean(strs[2]))
             {
                 like.IsCancel = false;
             }
             else
             {
                 like.IsCancel = true;
             }
             _db.SaveChanges();
         }
     }.Start();
 }
Пример #26
0
        private void ConfigureRedis(IServiceCollection services)
        {
            var redisConnection = Configuration.GetConnectionString("RedisConnection");
            var manager         = new RedisManagerPool(redisConnection);

            services.AddSingleton <IRedisClientsManager>(manager);
        }
        public void Can_Set_with_DateTime_in_Pipeline()
        {
            using (var clientManager = new RedisManagerPool(Config.MasterHost)) {
                // ReSharper disable once NotAccessedVariable
                bool      result;
                const int value = 111;
                var       key   = $"key:{value}";

                // Set key with pipeline (batching many requests)
                using (var redis = clientManager.GetClient()) {
                    using (var pipeline = redis.CreatePipeline()) {
                        // Only atomic operations can be called within a Transaction or Pipeline
                        Assert.Throws <NotSupportedException>(() =>
                                                              pipeline.QueueCommand(r => r.Set(key, value, DateTime.Now.AddMinutes(1)), r => result = r));
                    }

                    using (var pipeline = redis.CreatePipeline()) {
                        pipeline.QueueCommand(r => r.Set(key, value), r => result = r);
                        pipeline.QueueCommand(r => r.ExpireEntryAt(key, DateTime.Now.AddMinutes(1)));
                        pipeline.Flush();
                    }
                }

                // Get key
                using (var redis = clientManager.GetClient()) {
                    var res = redis.Get <int>(key);
                    Assert.That(res, Is.EqualTo(value));
                }
            }
        }
        static void Main(string[] args)
        {
            var redisManager = new RedisManagerPool("localhost:6379");


            using (var redis = redisManager.GetCacheClient())
            {
                try
                {
                    var json = "{\"acct_id\":1016,\"user_id\":\"17\",\"email_address\":\"[email protected]\",\"api_key\":\"asfasfasfasd\",\"subscription\":{\"subscription_id\":1,\"urls_per_month\":1000,\"max_retention_days\":15,\"cost_per_month_usd\":5.00},\"created_date\":\"2019-04-06T19:19:59.4200190Z\",\"start_current_month\":\"2019-04-06T19:19:59.4200900Z\",\"stripe_subscription\":{\"id\":\"safasdsda\",\"object\":\"subscription\",\"billing\":\"charge_automatically\",\"billingCycleAnchor\":\"2019-04-06T19:19:55.0000000Z\",\"cancelAtPeriodEnd\":false,\"created\":\"2019-04-06T19:19:55.0000000Z\",\"currentPeriodEnd\":\"2019-04-13T19:19:55.0000000Z\",\"currentPeriodStart\":\"2019-04-06T19:19:55.0000000Z\",\"items\":[{\"id\":\"sadf\",\"object\":\"subscription_item\",\"created\":\"2019-04-06T19:19:56.0000000Z\",\"metadata\":{},\"plan\":{\"id\":\"plan_EpYQHnD2Ksn25r\",\"object\":\"plan\",\"active\":true,\"aggregateUsage\":\"sum\",\"amount\":1,\"billingScheme\":\"per_unit\",\"created\":\"2019-04-05T14:46:52.0000000Z\",\"currency\":\"usd\",\"interval\":\"week\",\"intervalCount\":1,\"livemode\":false,\"metadata\":{},\"nickname\":\"per url\",\"usageType\":\"metered\"},\"quantity\":0,\"subscription\":\"sub_Eq03qDgdXjV8zu\"}],\"livemode\":false,\"metadata\":{},\"plan\":{\"id\":\"asdfsad\",\"object\":\"plan\",\"active\":true,\"aggregateUsage\":\"sum\",\"amount\":1,\"billingScheme\":\"per_unit\",\"created\":\"2019-04-05T14:46:52.0000000Z\",\"currency\":\"usd\",\"interval\":\"week\",\"intervalCount\":1,\"livemode\":false,\"metadata\":{},\"nickname\":\"per url\",\"usageType\":\"metered\"},\"quantity\":1,\"start\":\"2019-04-06T19:19:55.0000000Z\",\"status\":\"active\"},\"stripe_customer\":{\"id\":\"cus_Eq03mgKkLr5YHj\",\"object\":\"customer\",\"accountBalance\":0,\"created\":\"2019-04-06T19:19:54.0000000Z\",\"defaultSourceId\":\"card_1EMK3SKf8n8rpwYnBMEp5u4V\",\"delinquent\":false,\"email\":\"[email protected]\",\"invoicePrefix\":\"7927E6A6\",\"invoiceSettings\":{},\"livemode\":false,\"metadata\":{},\"sources\":[{\"__type\":\"Stripe.Card, Stripe.net\",\"id\":\"card_1EMK3SKf8n8rpwYnBMEp5u4V\",\"object\":\"card\",\"brand\":\"Visa\",\"country\":\"US\",\"defaultForCurrency\":false,\"expMonth\":4,\"expYear\":2020,\"fingerprint\":\"eSS4xyRaH5gdg55C\",\"funding\":\"credit\",\"last4\":\"4242\",\"metadata\":{}}],\"subscriptions\":[]}}";
                    var acct = ServiceStack.Text.JsonSerializer.DeserializeFromString <SubscriptionAccount>(json);

                    //items are null, try to put it back in and reserialize
                    acct.stripe_subscription.Items      = new Stripe.StripeList <Stripe.SubscriptionItem>();
                    acct.stripe_subscription.Items.Data = new List <Stripe.SubscriptionItem>();

                    var json2 = acct.ToJson();
                    var acct2 = ServiceStack.Text.JsonSerializer.DeserializeFromString <SubscriptionAccount>(json2);


                    if (acct2.stripe_subscription.Items == null)
                    {
                        throw new Exception("Items null");
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                }
            }
        }
Пример #29
0
        public void Register(IAppHost appHost)
        {
            var container   = appHost.GetContainer();
            var appSettings = appHost.AppSettings;
            var connections = appSettings.Get <Dictionary <string, string> >("connectionStrings");

#if DEBUG
            var sentinelHosts = new[] { connections.GetValueOrDefault("Sentinel0"), connections.GetValueOrDefault("Sentinel1"), connections.GetValueOrDefault("Sentinel2") };
            var sentinel      = new RedisSentinel(sentinelHosts, masterName: appSettings.GetString("redis.mastername"))
            {
                RedisManagerFactory = (master, slaves) => new RedisManagerPool(master, new RedisPoolConfig()
                {
                    MaxPoolSize = 20
                }),
                HostFilter = host => "{0}?db=0".Fmt(host)
            };
            container.Register <IRedisClientsManager>(c => sentinel.Start());
#else
            var redisManager = new RedisManagerPool(connections.GetValueOrDefault("Sentinel0"), new RedisPoolConfig()
            {
                MaxPoolSize = 20,
            });
            container.Register <IRedisClientsManager>(c => redisManager);
#endif
        }
Пример #30
0
        public void Execute()
        {
            RedisConfig.DefaultConnectTimeout = 1 * 1000;
            RedisConfig.DefaultSendTimeout    = 1 * 1000;
            RedisConfig.DefaultReceiveTimeout = 1 * 1000;

            RedisConfig.DefaultRetryTimeout = 10 * 1000;

            RedisConfig.DefaultIdleTimeoutSecs   = 240;
            RedisConfig.BackOffMultiplier        = 10;
            RedisConfig.BufferPoolMaxSize        = 500000;
            RedisConfig.VerifyMasterConnections  = true;
            RedisConfig.HostLookupTimeoutMs      = 1000;
            RedisConfig.DeactivatedClientsExpiry = TimeSpan.FromSeconds(15);
            RedisConfig.DisableVerboseLogging    = false;

            var redisManager = new RedisManagerPool(Config.MasterHost);

            // how many test items to create
            var items = 5;
            // how long to try popping
            var waitForSeconds = 5;
            // name of list
            var listId = "testlist";

            var startedAt = DateTime.Now;

            Console.WriteLine("--------------------------");
            Console.WriteLine("push {0} items to a list, then try pop for {1} seconds. repeat.", items, waitForSeconds);
            Console.WriteLine("--------------------------");

            using (var redis = redisManager.GetClient()) {
                do
                {
                    // add items to list
                    for (var i = 1; i <= items; i++)
                    {
                        redis.PushItemToList(listId, string.Format("item {0}", i));
                    }

                    do
                    {
                        var item = redis.BlockingPopItemFromList(listId, null);

                        // log the popped item.  if BRPOP timeout is null and list empty, I do not expect to print anything
                        Console.WriteLine("{0}", string.IsNullOrEmpty(item) ? " list empty " : item);

                        Thread.Sleep(1000);
                    } while (DateTime.Now - startedAt < TimeSpan.FromSeconds(waitForSeconds));

                    Console.WriteLine("--------------------------");
                    Console.WriteLine("completed first loop");
                    Console.WriteLine("--------------------------");
                } while (DateTime.Now - startedAt < TimeSpan.FromSeconds(2 * waitForSeconds));

                Console.WriteLine("--------------------------");
                Console.WriteLine("completed outer loop");
            }
        }
        private static RedisPubSubServer CreatePubSubServer(
            int intervalSecs = 1, int timeoutSecs = 3)
        {
            var clientsManager = new RedisManagerPool(TestConfig.MasterHosts);
            using (var redis = clientsManager.GetClient())
                redis.FlushAll();

            var pubSub = new RedisPubSubServer(
                clientsManager,
                "topic:test")
            {
                HeartbeatInterval = TimeSpan.FromSeconds(intervalSecs),
                HeartbeatTimeout = TimeSpan.FromSeconds(timeoutSecs)
            };

            return pubSub;
        }
Пример #32
0
        public void Does_set_all_properties_on_Client_using_ClientsManagers()
        {
            var connStr = "redis://*****:*****@host:1?ssl=true&db=0&connectTimeout=2&sendtimeout=3&receiveTimeout=4&idletimeoutsecs=5&NamespacePrefix=prefix.";
            var expected = "{Host:host,Port:1,Ssl:True,Client:nunit,Password:pass,Db:0,ConnectTimeout:2,SendTimeout:3,ReceiveTimeout:4,IdleTimeOutSecs:5,NamespacePrefix:prefix.}"
                .FromJsv<RedisEndpoint>();

            using (var pooledManager = new RedisManagerPool(connStr))
            {
                AssertClientManager(pooledManager, expected);
            }
            using (var pooledManager = new PooledRedisClientManager(connStr))
            {
                AssertClientManager(pooledManager, expected);
            }
            using (var basicManager = new BasicRedisClientManager(connStr))
            {
                AssertClientManager(basicManager, expected);
            }
        }
 public void Can_change_db_for_client()
 {
     using (var db1 = new RedisManagerPool(TestConfig.SingleHost + "?db=1"))
     using (var db2 = new RedisManagerPool(TestConfig.SingleHost + "?db=2"))
     {
         var val = Environment.TickCount;
         var key = "test" + val;
         var db1c = db1.GetClient();
         var db2c = db2.GetClient();
         try
         {
             db1c.Set(key, val);
             Assert.That(db2c.Get<int>(key), Is.EqualTo(0));
             Assert.That(db1c.Get<int>(key), Is.EqualTo(val));
         }
         finally
         {
             db1c.Remove(key);
         }
     }
 }
 public void Can_increment_and_reset_values()
 {
     using (var client = new RedisManagerPool(TestConfig.SingleHost).GetCacheClient())
     {
         Assert.That(client.Increment("incr:counter", 10), Is.EqualTo(10));
         client.Set("incr:counter", 0);
         Assert.That(client.Increment("incr:counter", 10), Is.EqualTo(10));
     }
 }
        public void RedisManagerPool_can_execute_CustomResolver()
        {
            var resolver = new FixedResolver(MasterHosts[0].ToRedisEndpoint(), SlaveHosts[0].ToRedisEndpoint());
            using (var redisManager = new RedisManagerPool("127.0.0.1:8888")
            {
                RedisResolver = resolver
            })
            {
                using (var master = redisManager.GetClient())
                {
                    Assert.That(master.GetHostString(), Is.EqualTo(MasterHosts[0]));
                    master.SetValue("KEY", "1");
                }
                using (var master = redisManager.GetClient())
                {
                    Assert.That(master.GetHostString(), Is.EqualTo(MasterHosts[0]));
                    master.Increment("KEY", 1);
                }
                Assert.That(resolver.NewClientsInitialized, Is.EqualTo(1));

                5.Times(i =>
                {
                    using (var slave = redisManager.GetReadOnlyClient())
                    {
                        Assert.That(slave.GetHostString(), Is.EqualTo(MasterHosts[0]));
                        Assert.That(slave.GetValue("KEY"), Is.EqualTo("2"));
                    }
                });
                Assert.That(resolver.NewClientsInitialized, Is.EqualTo(1));

                redisManager.FailoverTo("127.0.0.1:9999", "127.0.0.1:9999");

                5.Times(i =>
                {
                    using (var master = redisManager.GetClient())
                    {
                        Assert.That(master.GetHostString(), Is.EqualTo(MasterHosts[0]));
                        Assert.That(master.GetValue("KEY"), Is.EqualTo("2"));
                    }
                    using (var slave = redisManager.GetReadOnlyClient())
                    {
                        Assert.That(slave.GetHostString(), Is.EqualTo(MasterHosts[0]));
                        Assert.That(slave.GetValue("KEY"), Is.EqualTo("2"));
                    }
                });
                Assert.That(resolver.NewClientsInitialized, Is.EqualTo(2));
            }
        }
		public void Does_not_block_ReadWrite_clients_pool()
		{
            using (var manager = new RedisManagerPool(
                    hosts,
                    new RedisPoolConfig { MaxPoolSize = 4 })
                {
                    RedisClientFactory = mockFactory.Object,
                }
            )
            {
				var delay = TimeSpan.FromSeconds(1);
				var client1 = manager.GetClient();
				var client2 = manager.GetClient();
				var client3 = manager.GetClient();
				var client4 = manager.GetClient();

                Assert.That(((RedisClient)client1).IsManagedClient, Is.True);
                Assert.That(((RedisClient)client2).IsManagedClient, Is.True);
                Assert.That(((RedisClient)client3).IsManagedClient, Is.True);
                Assert.That(((RedisClient)client4).IsManagedClient, Is.True); 

				Action func = delegate {
					Thread.Sleep(delay + TimeSpan.FromSeconds(0.5));
					client4.Dispose();
				};

				func.BeginInvoke(null, null);

				var start = DateTime.Now;

				var client5 = manager.GetClient();

                Assert.That(((RedisClient)client5).IsManagedClient, Is.False); //outside of pool

				Assert.That(DateTime.Now - start, Is.LessThan(delay));

				AssertClientHasHost(client1, hosts[0]);
				AssertClientHasHost(client2, hosts[1]);
				AssertClientHasHost(client3, hosts[2]);
				AssertClientHasHost(client4, hosts[3]);
				AssertClientHasHost(client5, hosts[0]);

				mockFactory.VerifyAll();
			}
		}
		public void Can_have_different_pool_size_and_host_configurations()
		{
			var writeHosts = new[] { "readwrite1" };

            using (var manager = new RedisManagerPool(
                    writeHosts, 
                    new RedisPoolConfig { MaxPoolSize = 4 }) 
                {
					RedisClientFactory = mockFactory.Object,
				}
			)
			{
				//A poolsize of 4 will not block getting 4 clients
				using (var client1 = manager.GetClient())
				using (var client2 = manager.GetClient())
				using (var client3 = manager.GetClient())
				using (var client4 = manager.GetClient())
				{
					AssertClientHasHost(client1, writeHosts[0]);
					AssertClientHasHost(client2, writeHosts[0]);
					AssertClientHasHost(client3, writeHosts[0]);
					AssertClientHasHost(client4, writeHosts[0]);
				}

				mockFactory.VerifyAll();
			}
		}
        public void RedisManagerPool_alternates_hosts()
        {
            using (var redisManager = new RedisManagerPool(MasterHosts))
            {
                using (var master = redisManager.GetClient())
                {
                    Assert.That(master.GetHostString(), Is.EqualTo(MasterHosts[0]));
                    master.SetValue("KEY", "1");
                }
                using (var master = redisManager.GetClient())
                {
                    Assert.That(master.GetHostString(), Is.EqualTo(MasterHosts[0]));
                    master.Increment("KEY", 1);
                }

                5.Times(i =>
                {
                    using (var readOnly = redisManager.GetReadOnlyClient())
                    {
                        Assert.That(readOnly.GetHostString(), Is.EqualTo(MasterHosts[0]));
                        Assert.That(readOnly.GetValue("KEY"), Is.EqualTo("2"));
                    }
                });

                using (var cahce = redisManager.GetCacheClient())
                {
                    Assert.That(cahce.Get<string>("KEY"), Is.EqualTo("2"));
                }
            }
        }