public void GetOrCreateWithslidingExpiration() {
            var key = Guid.NewGuid().ToString();
            var val = Guid.NewGuid();

            IHttpRuntimeCacheProvider cacheProvider = new HttpRuntimeCacheProvider();
            var result = cacheProvider.GetOrCreate<Guid>(key, () => val, TimeSpan.FromSeconds(1.5D));
            Assert.AreEqual(result, val);
            {
                Thread.Sleep(1000);
                var exist = cacheProvider.TryGet<Guid>(key, out val);
                Assert.IsTrue(exist);
                Assert.AreEqual(result, val);
            }
            {
                Thread.Sleep(1000);
                var exist = cacheProvider.TryGet<Guid>(key, out val);
                Assert.IsTrue(exist);
                Assert.AreEqual(result, val);
            }
            {
                Thread.Sleep(2000);
                var exist = cacheProvider.TryGet<Guid>(key, out val);
                Assert.IsFalse(exist);
                Assert.AreEqual(val, Guid.Empty);
            }
        }
        public void Concurrency() {
            var cacheProvider1 = new HttpRuntimeCacheProvider("g");
            var cacheProvider2 = new HttpRuntimeCacheProvider("h");

            var tasks = new List<Task>();
            var total = 10;
            for (int i = 0; i < total; i++) {
                if ((Guid.NewGuid().GetHashCode() & 1) == 0) {
                    tasks.Add(new Task(action: x => cacheProvider1.GetOrCreate(x.ToString(), k => x), state: i));
                }
                else {
                    tasks.Add(new Task(action: x => cacheProvider2.GetOrCreate(x.ToString(), k => x), state: i));
                }
            }
            foreach (var task in tasks) {
                task.Start();
            }
            Task.WaitAll(tasks.ToArray(), CancellationToken.None);

            var count1 = cacheProvider1.Count();
            var count2 = cacheProvider2.Count();
            Assert.AreEqual(count1 + count2, total);

            cacheProvider1.Dump();
            cacheProvider2.Dump();

            cacheProvider1.ExpireAll();
            Assert.IsTrue(cacheProvider1.Count() == 0);
            Assert.IsTrue(cacheProvider2.Count() == count2);

        }
        public void Concurrency()
        {
            var cacheProvider1 = new HttpRuntimeCacheProvider("g");
            var cacheProvider2 = new HttpRuntimeCacheProvider("h");

            var tasks = new List <Task>();
            var total = 10;

            for (int i = 0; i < total; i++)
            {
                if ((Guid.NewGuid().GetHashCode() & 1) == 0)
                {
                    tasks.Add(new Task(action: x => cacheProvider1.GetOrCreate(x.ToString(), k => x), state: i));
                }
                else
                {
                    tasks.Add(new Task(action: x => cacheProvider2.GetOrCreate(x.ToString(), k => x), state: i));
                }
            }
            foreach (var task in tasks)
            {
                task.Start();
            }
            Task.WaitAll(tasks.ToArray(), CancellationToken.None);

            var count1 = cacheProvider1.Count();
            var count2 = cacheProvider2.Count();

            Assert.AreEqual(count1 + count2, total);

            cacheProvider1.ExpireAll();
            Assert.IsTrue(cacheProvider1.Count() == 0);
            Assert.IsTrue(cacheProvider2.Count() == count2);
        }
        public void Duplicate2()
        {
            var key = Guid.NewGuid().ToString();
            //region a 创建 key->val1
            var cacheProvider1 = new HttpRuntimeCacheProvider("c");

            cacheProvider1.GetOrCreate <Guid>(key, k => Guid.NewGuid());
            Assert.IsTrue(((HttpRuntimeCacheProvider)cacheProvider1).Count() == 1);

            //reigon b 创建 key-val2
            var cacheProvider2 = new HttpRuntimeCacheProvider("d");

            cacheProvider2.GetOrCreate <Guid>(key, k => Guid.NewGuid());
            Assert.IsTrue(cacheProvider2.Count() == 1);


            //确认reigon a 键 key 与 region b 键 key 对应值不同
            Guid val1;
            var  exist1 = cacheProvider1.TryGet <Guid>(key, out val1);

            Assert.IsTrue(exist1);

            Guid val2;
            var  exist2 = cacheProvider2.TryGet <Guid>(key, out val2);

            Assert.IsTrue(exist2);

            Assert.AreNotEqual(val1, val2);
        }
Exemple #5
0
        public void GetOrCreateWithslidingExpiration()
        {
            var key = Guid.NewGuid().ToString();
            var val = Guid.NewGuid();

            IHttpRuntimeCacheProvider cacheProvider = new HttpRuntimeCacheProvider();
            var result = cacheProvider.GetOrCreate <Guid>(key, () => val, TimeSpan.FromSeconds(1.5D));

            Assert.AreEqual(result, val);
            {
                Thread.Sleep(1000);
                var exist = cacheProvider.TryGet <Guid>(key, out val);
                Assert.IsTrue(exist);
                Assert.AreEqual(result, val);
            }
            {
                Thread.Sleep(1000);
                var exist = cacheProvider.TryGet <Guid>(key, out val);
                Assert.IsTrue(exist);
                Assert.AreEqual(result, val);
            }
            {
                Thread.Sleep(2000);
                var exist = cacheProvider.TryGet <Guid>(key, out val);
                Assert.IsFalse(exist);
                Assert.AreEqual(val, Guid.Empty);
            }
        }
        public void ExpireAll()
        {
            var key = Guid.NewGuid().ToString();
            //region a 创建 key->val1
            var cacheProvider1 = new HttpRuntimeCacheProvider("e");

            cacheProvider1.GetOrCreate <Guid>(key, k => Guid.NewGuid());

            //reigon b 创建 key-val2
            var cacheProvider2 = new HttpRuntimeCacheProvider("f");

            cacheProvider2.GetOrCreate <Guid>(key, k => Guid.NewGuid());

            //region a 过期全部, 确认 region b 未被过期
            cacheProvider1.ExpireAll();
            Guid val1;
            var  exist = cacheProvider1.TryGet <Guid>(key, out val1);

            Assert.IsFalse(exist);
            Assert.AreEqual(val1, Guid.Empty);

            Guid val2;
            var  exist2 = cacheProvider2.TryGet <Guid>(key, out val2);

            Assert.IsTrue(exist2);
        }
        public void TryGet() {
            var key = Guid.NewGuid().ToString();
            Guid val;

            IHttpRuntimeCacheProvider cacheProvider = new HttpRuntimeCacheProvider();
            var exist = cacheProvider.TryGet<Guid>(key, out val);
            Assert.IsFalse(exist);
            Assert.AreEqual(val, Guid.Empty);

        }
        public void Callback()
        {
            var key = Guid.NewGuid().ToString();
            var val = Guid.NewGuid();

            HttpRuntimeCacheProvider cacheProvider = new HttpRuntimeCacheProvider();
            var expireCallback = new CacheItemUpdateCallback(Callback);

            cacheProvider.Overwrite(key, val, DateTime.Now.AddSeconds(4D), expireCallback);
            Thread.Sleep(5000);
        }
Exemple #9
0
        public void TryGet()
        {
            var  key = Guid.NewGuid().ToString();
            Guid val;

            IHttpRuntimeCacheProvider cacheProvider = new HttpRuntimeCacheProvider();
            var exist = cacheProvider.TryGet <Guid>(key, out val);

            Assert.IsFalse(exist);
            Assert.AreEqual(val, Guid.Empty);
        }
        public void NullCache() {
            var key = Guid.NewGuid().ToString();
            Object val;

            IHttpRuntimeCacheProvider cacheProvider = new HttpRuntimeCacheProvider();
            var exist = cacheProvider.TryGet<Object>(key, out val);
            Assert.IsFalse(exist);
            Assert.AreEqual(val, null);

            cacheProvider.Overwrite(key, val);
            exist = cacheProvider.TryGet<Object>(key, out val);
            Assert.IsNull(val);
        }
Exemple #11
0
        public void NullCache()
        {
            var    key = Guid.NewGuid().ToString();
            Object val;

            IHttpRuntimeCacheProvider cacheProvider = new HttpRuntimeCacheProvider();
            var exist = cacheProvider.TryGet <Object>(key, out val);

            Assert.IsFalse(exist);
            Assert.AreEqual(val, null);

            cacheProvider.Overwrite(key, val);
            exist = cacheProvider.TryGet <Object>(key, out val);
            Assert.IsNull(val);
        }
Exemple #12
0
        public void Expire()
        {
            var key = Guid.NewGuid().ToString();
            var val = Guid.NewGuid();

            IHttpRuntimeCacheProvider cacheProvider = new HttpRuntimeCacheProvider();
            var result = cacheProvider.GetOrCreate <Guid>(key, () => val);

            Assert.AreEqual(result, val);

            cacheProvider.Expire(key);
            Guid val2;
            var  exist = cacheProvider.TryGet <Guid>(key, out val2);

            Assert.IsFalse(exist);
            Assert.AreEqual(val2, Guid.Empty);
        }
Exemple #13
0
        public void Duplicate() {
            var key = Guid.NewGuid().ToString();
            var val1 = Guid.NewGuid();

            //region a 创建 key->val1
            HttpRuntimeCacheProvider cacheProvider1 = new HttpRuntimeCacheProvider("a");
            var result = cacheProvider1.GetOrCreate<Guid>(key, k => val1);
            Assert.AreEqual(result, val1);
            Assert.IsTrue(((HttpRuntimeCacheProvider)cacheProvider1).Count() == 1);

            //reigon b 确认不存在键 key
            HttpRuntimeCacheProvider cacheProvider2 = new HttpRuntimeCacheProvider("b");
            Assert.IsTrue(cacheProvider2.Count() == 0);
            Guid val2;
            var exist = cacheProvider2.TryGet<Guid>(key, out val2);
            Assert.IsFalse(exist);
            Assert.AreEqual(val2, Guid.Empty);
        }
Exemple #14
0
        public void GetOrCreateWithAbsoluteExpiration()
        {
            var key = Guid.NewGuid().ToString();
            var val = Guid.NewGuid();

            IHttpRuntimeCacheProvider cacheProvider = new HttpRuntimeCacheProvider();
            var result = cacheProvider.GetOrCreate <Guid>(key, () => val, DateTime.UtcNow.AddSeconds(2D));

            Assert.AreEqual(result, val);

            var exist = cacheProvider.TryGet <Guid>(key, out val);

            Assert.IsTrue(exist);
            Assert.AreEqual(result, val);

            Thread.Sleep(2000);
            exist = cacheProvider.TryGet <Guid>(key, out val);
            Assert.IsFalse(exist);
            Assert.AreEqual(val, Guid.Empty);
        }
Exemple #15
0
        public void Overwrite()
        {
            var key = Guid.NewGuid().ToString();
            var val = Guid.NewGuid();

            IHttpRuntimeCacheProvider cacheProvider = new HttpRuntimeCacheProvider();
            var result = cacheProvider.GetOrCreate <Guid>(key, () => val);

            Assert.AreEqual(result, val);

            var val2 = Guid.NewGuid();

            cacheProvider.Overwrite <Guid>(key, val2);

            Guid val3;
            var  exist = cacheProvider.TryGet <Guid>(key, out val3);

            Assert.IsTrue(exist);
            Assert.AreEqual(val3, val2);
        }
Exemple #16
0
        public void ExpireAll() {
            var key = Guid.NewGuid().ToString();
            //region a 创建 key->val1
            var cacheProvider1 = new HttpRuntimeCacheProvider("e");
            cacheProvider1.GetOrCreate<Guid>(key, k => Guid.NewGuid());

            //reigon b 创建 key-val2
            var cacheProvider2 = new HttpRuntimeCacheProvider("f");
            cacheProvider2.GetOrCreate<Guid>(key, k => Guid.NewGuid());

            //region a 过期全部, 确认 region b 未被过期
            cacheProvider1.ExpireAll();
            Guid val1;
            var exist = cacheProvider1.TryGet<Guid>(key, out val1);
            Assert.IsFalse(exist);
            Assert.AreEqual(val1, Guid.Empty);

            Guid val2;
            var exist2 = cacheProvider2.TryGet<Guid>(key, out val2);
            Assert.IsTrue(exist2);
        }
        public void GetOrCreate() {
            var key = Guid.NewGuid().ToString();
            var val = Guid.NewGuid();

            var cacheProvider = new HttpRuntimeCacheProvider();
            var result = cacheProvider.GetOrCreate<Guid>(key, () => val);
            Assert.AreEqual(result, val);

            {
                var exist = cacheProvider.TryGet<Guid>(key, out val);
                Assert.IsTrue(exist);
                Assert.AreEqual(result, val);
            }

            {
                var result2 = cacheProvider.GetOrCreate<Guid>(key, () => {
                    Assert.Fail();
                    return Guid.NewGuid();
                });
                Assert.AreEqual(result2, val);
            }
        }
Exemple #18
0
        public void Duplicate()
        {
            var key  = Guid.NewGuid().ToString();
            var val1 = Guid.NewGuid();

            //region a 创建 key->val1
            HttpRuntimeCacheProvider cacheProvider1 = new HttpRuntimeCacheProvider("a");
            var result = cacheProvider1.GetOrCreate <Guid>(key, k => val1);

            Assert.AreEqual(result, val1);
            Assert.IsTrue(((HttpRuntimeCacheProvider)cacheProvider1).Count() == 1);

            //reigon b 确认不存在键 key
            HttpRuntimeCacheProvider cacheProvider2 = new HttpRuntimeCacheProvider("b");

            Assert.IsTrue(cacheProvider2.Count() == 0);
            Guid val2;
            var  exist = cacheProvider2.TryGet <Guid>(key, out val2);

            Assert.IsFalse(exist);
            Assert.AreEqual(val2, Guid.Empty);
        }
        public void Flush()
        {
            var cacheProvider = new HttpRuntimeCacheProvider();

            cacheProvider.Overwrite("id", 21685);
            cacheProvider.Overwrite("begin", DateTime.Now);
            cacheProvider.Flush(k => true);

            cacheProvider = new HttpRuntimeCacheProvider("User");
            cacheProvider.Overwrite("13", new User {
                Id = 13, Name = "Rattz", Age = 20, Address = new[] { "Beijing", "Wuhan" }
            });
            cacheProvider.Overwrite("14", new User {
                Id = 14, Name = "Kate", Age = 18, Address = new[] { "Tokyo", "Los Angeles" }
            });
            cacheProvider.Flush(k => k == "13");
            cacheProvider.Restore <User>("13");

            cacheProvider = new HttpRuntimeCacheProvider("Job");
            cacheProvider.Overwrite("52", new { Id = 52, Title = "Software Engineer", Salary = 10000 });
            cacheProvider.Overwrite("100", new { Id = 100, Title = "Gwhilsttroenterologist", Salary = 12000 });
            cacheProvider.Flush(k => true);
        }
Exemple #20
0
        public void Duplicate2() {
            var key = Guid.NewGuid().ToString();
            //region a 创建 key->val1
            var cacheProvider1 = new HttpRuntimeCacheProvider("c");
            cacheProvider1.GetOrCreate<Guid>(key, k => Guid.NewGuid());
            Assert.IsTrue(((HttpRuntimeCacheProvider)cacheProvider1).Count() == 1);

            //reigon b 创建 key-val2
            var cacheProvider2 = new HttpRuntimeCacheProvider("d");
            cacheProvider2.GetOrCreate<Guid>(key, k => Guid.NewGuid());
            Assert.IsTrue(cacheProvider2.Count() == 1);


            //确认reigon a 键 key 与 region b 键 key 对应值不同
            Guid val1;
            var exist1 = cacheProvider1.TryGet<Guid>(key, out val1);
            Assert.IsTrue(exist1);

            Guid val2;
            var exist2 = cacheProvider2.TryGet<Guid>(key, out val2);
            Assert.IsTrue(exist2);

            Assert.AreNotEqual(val1, val2);
        }
Exemple #21
0
        public void Concurrency()
        {
            HttpRuntimeCacheProvider cacheProvider1 = (HttpRuntimeCacheProvider)CacheProviderFactory.GetHttpRuntimeCache("g");
            HttpRuntimeCacheProvider cacheProvider2 = (HttpRuntimeCacheProvider)CacheProviderFactory.GetHttpRuntimeCache("h");

            var tasks = new List <Task>();

            for (int i = 0; i < 100; i++)
            {
                if ((Guid.NewGuid().GetHashCode() & 1) == 0)
                {
                    tasks.Add(new Task(action: x => cacheProvider1.GetOrCreate(x.ToString(), k => x), state: i));
                }
                else
                {
                    tasks.Add(new Task(action: x => cacheProvider2.GetOrCreate(x.ToString(), k => x), state: i));
                }
            }
            foreach (var task in tasks)
            {
                task.Start();
            }
            Task.WaitAll(tasks.ToArray(), CancellationToken.None);

            var count1 = cacheProvider1.Count();
            var count2 = cacheProvider2.Count();

            cacheProvider1.ExpireAll();
            Assert.IsTrue(cacheProvider1.Count() == 0);
            Assert.IsTrue(cacheProvider2.Count() == count2);

            foreach (var entry in System.Web.HttpRuntime.Cache.OfType <DictionaryEntry>())
            {
                Console.WriteLine("{0}: {1}", entry.Key, entry.Value);
            }
        }
Exemple #22
0
        public void GetOrCreate()
        {
            var key = Guid.NewGuid().ToString();
            var val = Guid.NewGuid();

            var cacheProvider = new HttpRuntimeCacheProvider();
            var result        = cacheProvider.GetOrCreate <Guid>(key, () => val);

            Assert.AreEqual(result, val);

            {
                var exist = cacheProvider.TryGet <Guid>(key, out val);
                Assert.IsTrue(exist);
                Assert.AreEqual(result, val);
            }

            {
                var result2 = cacheProvider.GetOrCreate <Guid>(key, () => {
                    Assert.Fail();
                    return(Guid.NewGuid());
                });
                Assert.AreEqual(result2, val);
            }
        }
Exemple #23
0
 public override void Setup()
 {
     base.Setup();
     _provider = new HttpRuntimeCacheProvider(HttpRuntime.Cache);
 }
        public void Overwrite() {
            var key = Guid.NewGuid().ToString();
            var val = Guid.NewGuid();

            IHttpRuntimeCacheProvider cacheProvider = new HttpRuntimeCacheProvider();
            var result = cacheProvider.GetOrCreate<Guid>(key, () => val);
            Assert.AreEqual(result, val);

            var val2 = Guid.NewGuid();
            cacheProvider.Overwrite<Guid>(key, val2);

            Guid val3;
            var exist = cacheProvider.TryGet<Guid>(key, out val3);
            Assert.IsTrue(exist);
            Assert.AreEqual(val3, val2);
        }
        public void ExpireAll() {
            var key = Guid.NewGuid().ToString();
            var val = Guid.NewGuid();

            HttpRuntimeCacheProvider cacheProvider = new HttpRuntimeCacheProvider();
            var result = cacheProvider.GetOrCreate<Guid>(key, () => val);
            Assert.AreEqual(result, val);
            Assert.IsTrue(cacheProvider.Count() > 0);


            cacheProvider.ExpireAll();
            Guid val2;
            var exist = cacheProvider.TryGet<Guid>(key, out val2);
            Assert.IsFalse(exist);
            Assert.AreEqual(val2, Guid.Empty);

            Assert.IsTrue(cacheProvider.Count() == 0);
        }
        public void Callback() {
            var key = Guid.NewGuid().ToString();
            var val = Guid.NewGuid();

            HttpRuntimeCacheProvider cacheProvider = new HttpRuntimeCacheProvider();
            var expireCallback = new CacheItemUpdateCallback(Callback);
            cacheProvider.Overwrite(key, val, DateTime.Now.AddSeconds(4D), expireCallback);
            Thread.Sleep(5000);
        }
        public void GetOrCreateWithAbsoluteExpiration() {
            var key = Guid.NewGuid().ToString();
            var val = Guid.NewGuid();

            IHttpRuntimeCacheProvider cacheProvider = new HttpRuntimeCacheProvider();
            var result = cacheProvider.GetOrCreate<Guid>(key, () => val, DateTime.UtcNow.AddSeconds(2D));
            Assert.AreEqual(result, val);

            var exist = cacheProvider.TryGet<Guid>(key, out val);
            Assert.IsTrue(exist);
            Assert.AreEqual(result, val);

            Thread.Sleep(2000);
            exist = cacheProvider.TryGet<Guid>(key, out val);
            Assert.IsFalse(exist);
            Assert.AreEqual(val, Guid.Empty);
        }
 public override void Setup()
 {
     base.Setup();
     _provider = new HttpRuntimeCacheProvider(HttpRuntime.Cache);
 }