public CacheService AddCache <TCache>() where TCache : ICache { TCache cacheInstance = (TCache)Activator.CreateInstance(typeof(TCache)); caches.Add(cacheInstance); return(this); }
private Tenant GetTenantBasedOnUrl(string urlHost) { if (String.IsNullOrEmpty(urlHost)) { throw new ApplicationException("urlHost must be specified"); } Tenant tenant; string cacheName = "all-tentnts-cache-name"; int cacheTimeOutSeconds = 30; List <Tenant> tenants = new TCache <List <Tenant> >().Get( cacheName, cacheTimeOutSeconds, () => { List <Tenant> tenants1; using (var context = new MultiTenantContext()) { tenants1 = context.Tenant.ToList(); } return(tenants1); }); tenant = tenants.FirstOrDefault(a => a.DomainName.ToLower().Equals(urlHost)) ?? tenants.FirstOrDefault(a => a.Default); if (tenant == null) { throw new ApplicationException("tenant not found based on URL, no default found"); } return(tenant); }
public static TCache Create <TCache>() where TCache : ICache, new() { var result = new TCache(); cacheList.Add(result); return(result); }
internal TCache GetValuesCache <TCache>() where TCache : ITempoMapValuesCache, new() { var result = _valuesCaches.OfType <TCache>().FirstOrDefault(); if (result == null) { _valuesCaches.Add(result = new TCache()); result.Invalidate(this); } return(result); }
public ActionResult Index() { var speakersAll = new TCache <List <Speaker> >(). Get("s-cache", 20, () => { List <Speaker> speakersAll1 = _context. Speakers. Include(a => a.Sessions.Select(b => b.Tenant)). ToList(); return(speakersAll1); }); var speakers = new List <Speaker>(); // ReSharper disable once LoopCanBeConvertedToQuery foreach (var speaker in speakersAll) { if (speaker.Sessions != null) { var speakerInTenant = speaker.Sessions. Any(a => a.Tenant.Name == Tenant.Name); if (speakerInTenant) { speakers.Add(new Speaker { FirstName = speaker.FirstName, LastName = speaker.LastName, Id = speaker.Id, PictureId = speaker.PictureId, Bio = speaker.Bio, AllowHtml = speaker.AllowHtml, WebSite = speaker.WebSite, ImageUrl = $"/Content/Images/Speakers/Speaker-{speaker.PictureId}-75.jpg", Sessions = speaker.Sessions. Where(a => a.Tenant.Name == Tenant.Name). OrderBy(a => a.Title).ToList() }); } } else { } } return(View("Index", "_Layout", speakers)); }
public async Task <ActionResult> Index() { Task <List <Speaker> > speakersAll = new TCache <Task <List <Speaker> > >(). Get("s-cache", 20, () => { var speakersAll1 = context.Speakers.ToListAsync(); return(speakersAll1); }); var speakers = new List <Speaker>(); speakers = new List <Speaker>(); foreach (var speaker in await speakersAll) // The "await" needs to be added where the function would be calling the thing containted within the Task<>. // In this case, our foreach is really wanting a List, not a Task. Our speakersAll is really a Task<List> without the await. { bool speakerInTenant = speaker.Sessions. Any(a => a.Tenant.Name == Tenant.Name); if (speakerInTenant) { speakers.Add(new Speaker { FirstName = speaker.FirstName, LastName = speaker.LastName, Id = speaker.Id, PictureId = speaker.Id, Bio = speaker.Bio, AllowHtml = speaker.AllowHtml, WebSite = speaker.WebSite, ImageUrl = $"/Content/Images/Speakers/Speaker-{speaker.PictureId}-75.jpg", Sessions = speaker.Sessions. Where(a => a.Tenant.Name == Tenant.Name). OrderBy(a => a.Title).ToList() }); } } return(View("Index", "_Layout", speakers)); }
ConcurrentDictionary <string, Dict> GetVectDict(LangLabel lang) { lock (VectCacheLock) { if (_vectCache == null) { _vectCache = new TCache(); } if (_vectCache.ContainsKey(lang)) { if (_vectCache[lang].TryGetTarget(out ConcurrentDictionary <string, Dict> dict)) { return(dict); } } var new_dict = new ConcurrentDictionary <string, Dict>(); _vectCache[lang] = new WeakReference <ConcurrentDictionary <string, Dict> >(new_dict); return(new_dict); } }
public async Task <ActionResult> Index() { var speakers = new List <Speaker>(); //var speakersAll = await context.Speakers.ToListAsync(); Task <List <Speaker> > speakersAll = new TCache <Task <List <Speaker> > >().Get("s-cache", 20, () => { var speakersAll1 = context.Speakers.ToListAsync(); return(speakersAll1); }); foreach (var speaker in await speakersAll) { bool speakerInTenant = speaker.Sessions.Any(a => a.Tenant.Name == Tenant.Name); if (speakerInTenant) { speakers.Add(new Speaker { FirstName = speaker.FirstName, LastName = speaker.LastName, Id = speaker.Id, Bio = speaker.Bio, Website = speaker.Website, AllowHtml = speaker.AllowHtml, PictureId = speaker.PictureId, ImageUrl = $"/Content/Images/Speakers/Speaker-{speaker.PictureId}-75.jpg", Sessions = speaker.Sessions .Where(a => a.Tenant.Name == Tenant.Name) .OrderBy(a => a.Title).ToList() }); } } return(View("Index", "_Layout", speakers)); }
public static object GetLock(string key, TimeSpan refreshInterval, TimeSpan slidingExpiration, bool persistToFile, CacheItemPriority priority, TCache.CacheLoaderDelegate cacheLoader) { lock (_ReadLockbox) // could use Instance.SyncRoot for all access { CacheEntry entry; if (ContainsCacheEntry(key)) { entry = Instance[key]; entry.LastUse = DateTime.Now; } else { // escalate to a writer lock for this operation lock (_WriteLockbox) // could use Instance.SyncRoot for all access { entry = new CacheEntry(); entry.CacheLoader = cacheLoader; entry.RefreshInterval = refreshInterval; entry.SlidingExpiration = slidingExpiration; entry.CacheItemPriority = priority; entry.LastUse = DateTime.Now; entry.PersistToFile = persistToFile; if (persistToFile) { string filename = key; foreach (char c in Path.GetInvalidFileNameChars()) { filename = filename.Replace( c.ToString(), "^_^" ); } filename += ".bin"; if (filename.Length > 255) throw new ApplicationException("Can't use persist to key name is greater than 255."); string basePath = null; System.Web.HttpContext context = System.Web.HttpContext.Current; if (context == null) basePath = AppDomain.CurrentDomain.BaseDirectory; else basePath = context.Server.MapPath("~/"); basePath = Path.Combine(basePath, "LocalCache"); if (Directory.Exists(basePath) == false) Directory.CreateDirectory(basePath); entry.PersistedFilename = Path.Combine(basePath, filename); } Instance.Add(key, entry); } } return entry.Locker; } }
// GET: rest/Speaker/extjswrapper or rest/Speaker public HttpResponseMessage Get(bool extJsWrapper = false) { var speakersAll = new TCache <List <Speaker> >(). Get("s-cache", 20, () => { var speakersAll1 = _context.Speakers. Include(a => a.Sessions.Select(b => b.Tenant)). ToList(); return(speakersAll1); }); //var badCnt = TestForBad(speakersAll); var speakers = new List <Speaker>(); // ReSharper disable once LoopCanBeConvertedToQuery foreach (var speaker in speakersAll) { var speakerInTenant = speaker.Sessions. Any(a => a.Tenant.Name == Tenant.Name); if (speakerInTenant) { speakers.Add(new Speaker { FirstName = speaker.FirstName, LastName = speaker.LastName, //Id = speaker.Id, Id = speaker.PictureId, PictureId = speaker.PictureId, Bio = speaker.Bio, AllowHtml = speaker.AllowHtml, WebSite = speaker.WebSite, ImageUrl = $"/Content/Images/Speakers/Speaker-{speaker.PictureId}-75.jpg", Sessions = speaker.Sessions. Where(a => a.Tenant.Name == Tenant.Name). OrderBy(a => a.Title).ToList() }); } } var speakers2 = speakers.Select(speaker => new Speaker { Id = speaker.Id, FirstName = speaker.FirstName, LastName = speaker.LastName, WebSite = speaker.WebSite, ImageUrl = "", Bio = speaker.Bio, AllowHtml = speaker.AllowHtml, Sessions = speaker.Sessions.Select(session => new Session() { Id = session.Id, Title = session.Title, //SessionUrl = "", DescriptionShort = session.DescriptionShort, Description = session.Description //TenantName = session.Tenant.Name }).ToList() }).ToList(); if (extJsWrapper) { return(Request.CreateResponse(HttpStatusCode.OK, new { data = speakers2, total = speakers2.ToList().Count, success = true })); } else { return(Request.CreateResponse(HttpStatusCode.OK, speakers2)); } }
private static void Test() { //create instance TCache cache = new TCache("c001"); //or cache = TCache.Nodes("c001"); //add & get cache cache["item01"] = "Hello world"; string v1 = (string)cache["item01"]; Console.WriteLine(v1); cache["item02"] = "abc"; cache["item03"] = DateTime.Now; cache["item04"] = 3.14159; Console.WriteLine(cache["item02"]); Console.WriteLine(cache["item03"]); Console.WriteLine(cache["item04"]); //add cache items with values cache.Add("item10", "Foo"); cache.Add("item11", "Bar", DateTime.Now); //specify item's time property cache.Add("item13", "Test text", TCache.NoItemTime); string v2 = (string)cache.Get("item11"); string v3 = (string)cache.Get("item11", DateTime.Now.AddSeconds(-3)); //check the item time if modified since the specify time try { //the follow line will raise CacheItemNotModifyException string v4 = (string)cache.Get("item11", DateTime.Now.AddSeconds(3)); Console.WriteLine("ERROR"); } catch (CacheItemNotModifiedException ex) { Console.WriteLine("test specify time... PASS, actually time:{0}", ex.LastModifyTime); } try { //the follow line will raise CacheItemNotFoundException object v5 = cache.Get("item999"); Console.WriteLine("ERROR"); } catch (CacheItemNotFoundException) { Console.WriteLine("test specify key that does not exis ... PASS"); } //get cache item detail infomation TCacheItem item = cache.GetItem("item11"); Console.WriteLine("Key:{0} value:{1} item time:{2}", item.Key, item.Value, item.ItemTime); //multi get TCacheItem[] items = cache.MultiGet(new string[] { "item10", "item11", "item12", "item13" }); foreach (TCacheItem ci in items) { Console.WriteLine("Key:{0} value:{1}", ci.Key, ci.Value, ci.ItemTime); } //remove cache.Remove("item11"); try { //the follow line will raise CacheItemNotFoundException string v6 = (string)cache.Get("item11"); Console.WriteLine("ERROR"); } catch (CacheItemNotFoundException) { Console.WriteLine("test remove item... PASS"); } //---------------- Non-persistance test ------------------ TCacheNP.Add("item10", "Foo"); TCacheNP.Add("item11", "Bar"); TCacheNP.Add("item12", "This will expired in 2 seconds", new TimeSpan(0, 0, 2)); TCacheNP.Add("item13", 123456); System.Threading.Thread.Sleep(3000); string np1 = (string)TCacheNP.Get("item10"); string np2 = (string)TCacheNP.Get("item11"); string np3 = (string)TCacheNP.Get("item12"); //this should be NULL int np4 = (int)TCacheNP.Get("item13"); if (np3 == null) { Console.WriteLine("non-persistance expired ok"); } //multi get TCacheItem[] npitems = TCacheNP.MultiGet(new string[] { "item10", "item11", "item12", "item13" }); foreach (TCacheItem ci in npitems) { Console.WriteLine("Key:{0} value:{1}", ci.Key, ci.Value); } //object test Member m = new Member() { Id = 789, Name = "Jacky" }; TCacheNP.Add("item20", m); Member m2 = (Member)TCacheNP.Get("item20"); Console.WriteLine("Object test ok, id:{0} name:{1}", m2.Id, m2.Name); Console.WriteLine("DEMO END"); Console.ReadLine(); }
private static void Test() { //create instance TCache cache = new TCache("tcd001"); //or cache = TCache.Nodes("c001"); //add & get cache cache["item01"] = "Hello world"; string v1 = (string)cache["item01"]; Console.WriteLine(v1); cache["item02"] = "abc"; cache["item03"] = DateTime.Now; cache["item04"] = 3.14159; Console.WriteLine(cache["item02"]); Console.WriteLine(cache["item03"]); Console.WriteLine(cache["item04"]); //add cache items with values cache.Add("item10", "Foo"); cache.Add("item11", "Bar", DateTime.Now); //specify item's time property cache.Add("item13", "Test text", TCache.NoItemTime); string v2 = (string)cache.Get("item11"); string v3 = (string)cache.Get("item11", DateTime.Now.AddSeconds(-3)); //check the item time if modified since the specify time try { //the follow line will raise CacheItemNotModifyException string v4 = (string)cache.Get("item11", DateTime.Now.AddSeconds(3)); Console.WriteLine("ERROR"); } catch (CacheItemNotModifiedException ex) { Console.WriteLine("test specify time... PASS, actually time:{0}", ex.LastModifyTime); } try { //the follow line will raise CacheItemNotFoundException object v5 = cache.Get("item999"); Console.WriteLine("ERROR"); } catch (CacheItemNotFoundException) { Console.WriteLine("test specify key that does not exis ... PASS"); } //get cache item detail infomation TCacheItem item = cache.GetItem("item11"); Console.WriteLine("Key:{0} value:{1} item time:{2}", item.Key, item.Value, item.ItemTime); //multi get TCacheItem[] items = cache.MultiGet(new string[] { "item10", "item11", "item12", "item13" }); foreach (TCacheItem ci in items) { Console.WriteLine("Key:{0} value:{1}", ci.Key, ci.Value, ci.ItemTime); } //remove cache.Remove("item11"); try { //the follow line will raise CacheItemNotFoundException string v6 = (string)cache.Get("item11"); Console.WriteLine("ERROR"); } catch (CacheItemNotFoundException) { Console.WriteLine("test remove item... PASS"); } Console.WriteLine("DEMO END"); Console.ReadLine(); }