public CacheEntry(CacheEntryIdentifier identifier, object value, TimeSpan expirationPeriod) { Identifier = identifier; Value = value; this.ExpirationPeriod = expirationPeriod; ValidUntil = DateTime.Now.Add(expirationPeriod); }
public void Remove(CacheEntryIdentifier key) { if (cacheEntriesMap.TryGetValue(key, out var value)) { cacheEntriesList.Remove(value); cacheEntriesMap.Remove(key); } }
public void Add(string key, object value, TimeSpan?validUntil = null) { var expiration = validUntil ?? TimeSpan.FromDays(1000); var indentifier = new CacheEntryIdentifier(key, options); var cacheEntry = new CacheEntry(indentifier, value, expiration); cacheStore.AddEntry(cacheEntry); }
public T Get(CacheEntryIdentifier key) { // if key exists, just move it to the start the line if (cacheEntriesMap.TryGetValue(key, out var value)) { MoveNodeToFront(value); return(value.Value); } return(default(T)); }
public void RemoveEntry(string key) { wrLock.EnterWriteLock(); try { var identifier = new CacheEntryIdentifier(key, options); cacheEntries.Remove(identifier); } finally { wrLock.ExitWriteLock(); } }
public CacheEntry GetEntry(string key) { wrLock.EnterUpgradeableReadLock(); try { var identifier = new CacheEntryIdentifier(key, options); var cacheEntry = cacheEntries.Get(identifier); // check if null if (cacheEntry == null) { return(null); } // check if entry has expired if (cacheEntry.HasExpired()) { wrLock.EnterWriteLock(); try { cacheEntries.Remove(identifier); return(null); } finally { wrLock.ExitWriteLock(); } } else { // update the valid time cacheEntry.UpdateValidUntil(); return(cacheEntry); } } finally { wrLock.ExitUpgradeableReadLock(); } }
public static CacheEntry New(string key, object value, TimeSpan timeSpan, LRUCacheOptions options = null) { var indentifier = new CacheEntryIdentifier(key, options ?? new LRUCacheOptions()); return(new CacheEntry(indentifier, value, timeSpan)); }