Multi-threaded high performance Least Recently Used cache with async/await support shipped as source-only NuGet package
C# PowerShell Batchfile
Latest commit 6c014d5 Dec 6, 2016 @dennisdoomen committed on GitHub * Added an example app to run some long-running tests (#30)
* Fixed a potential deadlock
* Added additional statistics.
Permalink
Failed to load latest commit information.
.nuget Fix build after upgrading to NetStandard (#16) Aug 3, 2016
Build Merged all C# files before they get embedded in the Nuget package. (#21) Aug 10, 2016
Lib Temporarily disable the deadlocking unit test and fixed the AppVeyor … Feb 28, 2016
Samples/ExampleApp * Added an example app to run some long-running tests (#30) Dec 6, 2016
Src * Added an example app to run some long-running tests (#30) Dec 6, 2016
Tests/FluidCaching.Specs * Added an example app to run some long-running tests (#30) Dec 6, 2016
.gitattributes Initial non-compilable skeleton based on implementation by Brian Agnes Jan 9, 2016
.gitignore Initial non-compilable skeleton based on implementation by Brian Agnes Jan 9, 2016
Build.Package.bat Initial non-compilable skeleton based on implementation by Brian Agnes Jan 9, 2016
CONTRIBUTING.md
FluidCaching.sln * Added an example app to run some long-running tests (#30) Dec 6, 2016
FluidCaching.sln.DotSettings Refactored the counters into a dedicated statistics class. Aug 8, 2016
FluidCaching.v2.ncrunchsolution Major refactoring intended to get rid of accessing public fields. Feb 6, 2016
README.md Added a spec to prove the difference between TotalCount and ActualCount. Feb 8, 2016
nuget.config Fix build after upgrading to NetStandard (#16) Aug 3, 2016

README.md

Fluid Caching

  • LRU cache based on this excellent article.
  • The build status is Build status

Algorithm

  • Items in the cache are represented by Nodes.
  • The life-cycle of a node is managed by the LifeSpanManager.
  • Indexes only contain a WeakReference to the nodes and are there to support finding object through different keys.
  • Whenever a new value is added to the cache, all indexes will receive a reference to the newly created Node.
  • The LifeSpanManager assigns the nodes to AgeBags. Each AgeBag references the first node in a linked list of nodes.
  • The current bag maintains the most recently touched nodes.