Repository files navigation

CacheManager

CacheManager is an open source caching abstraction layer for .NET written in C#. It supports various cache providers and implements many advanced features.

The main goal of the CacheManager package is to make developer's life easier to handle even very complex caching scenarios.
With CacheManager it is possible to implement multiple layers of caching, e.g. in-process caching in front of a distributed cache, in just a few lines of code.

CacheManager is not just an interface to unify the programming model for various cache providers, which will make it very easy to change the caching strategy later on in a project. It also offers additional features, like cache synchronization, concurrent updates, serialization, events, performance counters... The developer can opt-in to those features only if needed.

Build Status

Build ServerStatus
Windows, KoreBuildBuild status
Windows, MSBuildBuild status
Linux, MonoBuild Status

CacheManager Nuget Packages

Package Name.Net 4.0.Net 4.5Minimum .NET Platform Standard version *
[CacheManager.Core] Core.nugetxx1.1
[CacheManager.StackExchange.Redis] Redis.nugetxx1.5
[CacheManager.SystemRuntimeCaching] SystemRuntimeCaching.nugetxx-
[CacheManager.Microsoft.Extensions.Caching.Memory] MSCache.nuget->=4.5.11.3
[CacheManager.Microsoft.Extensions.Configuration] Configuration.nuget-x1.3
[CacheManager.Microsoft.Extensions.Logging] Logging.nuget-x1.3
[CacheManager.Serialization.Json] Json.nugetxx1.2
[CacheManager.Serialization.ProtoBuf] ProtoBuf.nugetxx1.3
[CacheManager.Web] Web.nuget-x-
[CacheManager.Memcached] Memcached.nugetxx-
[CacheManager.Couchbase] Couchbase.nuget-x-

* "Minimum .NET Platform Standard" version means, that at least the listed version per package must be targeted if you want to use it. See the documentation for more details of what .NET platform standard means.

Beta Packages

Beta versions of the CacheManager packages are getting pushed to https://www.myget.org/gallery/cachemanager on each build. Add the following feed, if you want to play with the not yet released bits:

https://www.myget.org/F/cachemanager/api/v3/index.json

To find which check-in created which build, use this build history.

Documentation

Documentation can be found within the articles folder of the Cache Manager's repository and hosted on my website:

  • Getting Started Is a very basic introduction of how to install and use Cache Manager
  • Configuration Explains how to configure Cache Manager via code or configuration file
  • Features and Architecture A more advanced in depth introduction to all features of Cache Manager
  • Update Operations Explanation of why and when to use the update method instead of Put
  • Serialization Cache value serialization and configuration options explained in detail.
  • Cache Synchronization Use case for and explanation of the Cache Backplane feature.
  • Logging The logging abstraction and implementations explained

There is also from source generated html documentation available online.

Examples

Features in Version: 0.9.x

  • One common interface for handling different caching technologies: ICache<T>
  • Configurable by
    • Code with many different paths and a fluent configuration builder
    • Microsoft.Extensions.Configuration
    • App/Web.config
    • See configuration docs
  • Support for different cache providers
  • Serialization can now be configured. Serialization is only needed in distributed caches. If no additional serialization package is installed and configured, Binary serialization will be used (if available) The following are the currently available serialization options:
    • Binary (build in if the full CLR is being used)
    • Json based on the popular Newtonsoft.Json library
    • Json with Gzip compression
    • Protocol Buffer Google's protobuf. The package uses Mark's protobuf-net implementation.
  • Update values with lock or transaction for distributed caches. The interfaced provides a simple update method which internally ensures you work with the latest version. And CacheManager handles version conflicts for you.
  • Logging CacheManager comes with an extensible logging API (see samples).
    • All standard cache operations are logged
    • Based on log levels more or less information will be logged (try Trace and Debug)
    • Current concrete implementation is based on the ASP.NET Core logging. Other implementation of CacheManager's ILoggerFactory might follow.
  • Strongly typed cache interface.
  • Multiple layers By having multiple cache handles managed by CacheManager, you can easily implement layered caches. For example, an in process cache in front of your distributed cache, to make read access faster. CacheManager will synchronize those layers for you.
    • Put and Add operations will always be executed on all cache handles registered on the manager.
    • On Get, there are different configuration options defined by CacheUpdateMode, if the item was available in one cache handle:
      • None: No update across the cache handles on Get
      • Up: Updates the handles "above"
      • All: Updates/Adds the item to all handles
  • Expiration: It is possible to configure the expiration per cache handle within the manager or per cache item. The following are the supported expiration modes:
    • Sliding expiration: On cache hit, the cache item expiration timeout will be extended by the configured amount.
    • Absolute expiration: The cache item will expire after the configured timeout.
  • Cache Regions: Even if some cache systems do not support or implement cache regions, the CacheManager implements the mechanism. This can be used to for example group elements and remove all of them at once.
  • Statistics: Counters for all kind of cache actions.
  • Performance Counters: To be able to inspect certain numbers with perfmon, CacheManager supports performance counters per instance of the manager and per cache handle.
  • Event System: CacheManager triggers events for common cache actions: OnGet, OnAdd, OnPut, OnRemove, OnClear, OnClearRegion
  • System.Web.OutputCache implementation to use CacheManager as OutputCache provider which makes the OutputCache extremely flexible, for example by using a distributed cache like Redis across many web servers.
  • Cache clients synchronization
    • Implemented with the Redis pub/sub feature
    • (Other implementations without Redis might be an option for a later version)
  • Supports .Net 4.0, .Net 4.5, and can be used in cross platform projects with the new .NET Core runtime

[TOC]

About

CacheManager is an open source caching abstraction layer for .NET written in C#. It supports various cache providers and implements many advanced features.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

CacheManager

CacheManager is an open source caching abstraction layer for .NET written in C#. It supports various cache providers and implements many advanced features.

The main goal of the CacheManager package is to make developer's life easier to handle even very complex caching scenarios.
With CacheManager it is possible to implement multiple layers of caching, e.g. in-process caching in front of a distributed cache, in just a few lines of code.

CacheManager is not just an interface to unify the programming model for various cache providers, which will make it very easy to change the caching strategy later on in a project. It also offers additional features, like cache synchronization, concurrent updates, serialization, events, performance counters... The developer can opt-in to those features only if needed.

Build Status

Build ServerStatus
Windows, KoreBuildBuild status
Windows, MSBuildBuild status
Linux, MonoBuild Status

CacheManager Nuget Packages

Package Name.Net 4.0.Net 4.5Minimum .NET Platform Standard version *
[CacheManager.Core] Core.nugetxx1.1
[CacheManager.StackExchange.Redis] Redis.nugetxx1.5
[CacheManager.SystemRuntimeCaching] SystemRuntimeCaching.nugetxx-
[CacheManager.Microsoft.Extensions.Caching.Memory] MSCache.nuget->=4.5.11.3
[CacheManager.Microsoft.Extensions.Configuration] Configuration.nuget-x1.3
[CacheManager.Microsoft.Extensions.Logging] Logging.nuget-x1.3
[CacheManager.Serialization.Json] Json.nugetxx1.2
[CacheManager.Serialization.ProtoBuf] ProtoBuf.nugetxx1.3
[CacheManager.Web] Web.nuget-x-
[CacheManager.Memcached] Memcached.nugetxx-
[CacheManager.Couchbase] Couchbase.nuget-x-

* "Minimum .NET Platform Standard" version means, that at least the listed version per package must be targeted if you want to use it. See the documentation for more details of what .NET platform standard means.

Beta Packages

Beta versions of the CacheManager packages are getting pushed to https://www.myget.org/gallery/cachemanager on each build. Add the following feed, if you want to play with the not yet released bits:

https://www.myget.org/F/cachemanager/api/v3/index.json

To find which check-in created which build, use this build history.

Documentation

Documentation can be found within the articles folder of the Cache Manager's repository and hosted on my website:

  • Getting Started Is a very basic introduction of how to install and use Cache Manager
  • Configuration Explains how to configure Cache Manager via code or configuration file
  • Features and Architecture A more advanced in depth introduction to all features of Cache Manager
  • Update Operations Explanation of why and when to use the update method instead of Put
  • Serialization Cache value serialization and configuration options explained in detail.
  • Cache Synchronization Use case for and explanation of the Cache Backplane feature.
  • Logging The logging abstraction and implementations explained

There is also from source generated html documentation available online.

Examples

Features in Version: 0.9.x

  • One common interface for handling different caching technologies: ICache<T>
  • Configurable by
    • Code with many different paths and a fluent configuration builder
    • Microsoft.Extensions.Configuration
    • App/Web.config
    • See configuration docs
  • Support for different cache providers
  • Serialization can now be configured. Serialization is only needed in distributed caches. If no additional serialization package is installed and configured, Binary serialization will be used (if available) The following are the currently available serialization options:
    • Binary (build in if the full CLR is being used)
    • Json based on the popular Newtonsoft.Json library
    • Json with Gzip compression
    • Protocol Buffer Google's protobuf. The package uses Mark's protobuf-net implementation.
  • Update values with lock or transaction for distributed caches. The interfaced provides a simple update method which internally ensures you work with the latest version. And CacheManager handles version conflicts for you.
  • Logging CacheManager comes with an extensible logging API (see samples).
    • All standard cache operations are logged
    • Based on log levels more or less information will be logged (try Trace and Debug)
    • Current concrete implementation is based on the ASP.NET Core logging. Other implementation of CacheManager's ILoggerFactory might follow.
  • Strongly typed cache interface.
  • Multiple layers By having multiple cache handles managed by CacheManager, you can easily implement layered caches. For example, an in process cache in front of your distributed cache, to make read access faster. CacheManager will synchronize those layers for you.
    • Put and Add operations will always be executed on all cache handles registered on the manager.
    • On Get, there are different configuration options defined by CacheUpdateMode, if the item was available in one cache handle:
      • None: No update across the cache handles on Get
      • Up: Updates the handles "above"
      • All: Updates/Adds the item to all handles
  • Expiration: It is possible to configure the expiration per cache handle within the manager or per cache item. The following are the supported expiration modes:
    • Sliding expiration: On cache hit, the cache item expiration timeout will be extended by the configured amount.
    • Absolute expiration: The cache item will expire after the configured timeout.
  • Cache Regions: Even if some cache systems do not support or implement cache regions, the CacheManager implements the mechanism. This can be used to for example group elements and remove all of them at once.
  • Statistics: Counters for all kind of cache actions.
  • Performance Counters: To be able to inspect certain numbers with perfmon, CacheManager supports performance counters per instance of the manager and per cache handle.
  • Event System: CacheManager triggers events for common cache actions: OnGet, OnAdd, OnPut, OnRemove, OnClear, OnClearRegion
  • System.Web.OutputCache implementation to use CacheManager as OutputCache provider which makes the OutputCache extremely flexible, for example by using a distributed cache like Redis across many web servers.
  • Cache clients synchronization
    • Implemented with the Redis pub/sub feature
    • (Other implementations without Redis might be an option for a later version)
  • Supports .Net 4.0, .Net 4.5, and can be used in cross platform projects with the new .NET Core runtime

[TOC]

About

CacheManager is an open source caching abstraction layer for .NET written in C#. It supports various cache providers and implements many advanced features.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

CacheManager

CacheManager is an open source caching abstraction layer for .NET written in C#. It supports various cache providers and implements many advanced features.

The main goal of the CacheManager package is to make developer's life easier to handle even very complex caching scenarios.
With CacheManager it is possible to implement multiple layers of caching, e.g. in-process caching in front of a distributed cache, in just a few lines of code.

CacheManager is not just an interface to unify the programming model for various cache providers, which will make it very easy to change the caching strategy later on in a project. It also offers additional features, like cache synchronization, concurrent updates, serialization, events, performance counters... The developer can opt-in to those features only if needed.

Build Status

Build ServerStatus
Windows, KoreBuildBuild status
Windows, MSBuildBuild status
Linux, MonoBuild Status

CacheManager Nuget Packages

Package Name.Net 4.0.Net 4.5Minimum .NET Platform Standard version *
[CacheManager.Core] Core.nugetxx1.1
[CacheManager.StackExchange.Redis] Redis.nugetxx1.5
[CacheManager.SystemRuntimeCaching] SystemRuntimeCaching.nugetxx-
[CacheManager.Microsoft.Extensions.Caching.Memory] MSCache.nuget->=4.5.11.3
[CacheManager.Microsoft.Extensions.Configuration] Configuration.nuget-x1.3
[CacheManager.Microsoft.Extensions.Logging] Logging.nuget-x1.3
[CacheManager.Serialization.Json] Json.nugetxx1.2
[CacheManager.Serialization.ProtoBuf] ProtoBuf.nugetxx1.3
[CacheManager.Web] Web.nuget-x-
[CacheManager.Memcached] Memcached.nugetxx-
[CacheManager.Couchbase] Couchbase.nuget-x-

* "Minimum .NET Platform Standard" version means, that at least the listed version per package must be targeted if you want to use it. See the documentation for more details of what .NET platform standard means.

Beta Packages

Beta versions of the CacheManager packages are getting pushed to https://www.myget.org/gallery/cachemanager on each build. Add the following feed, if you want to play with the not yet released bits:

https://www.myget.org/F/cachemanager/api/v3/index.json

To find which check-in created which build, use this build history.

Documentation

Documentation can be found within the articles folder of the Cache Manager's repository and hosted on my website:

  • Getting Started Is a very basic introduction of how to install and use Cache Manager
  • Configuration Explains how to configure Cache Manager via code or configuration file
  • Features and Architecture A more advanced in depth introduction to all features of Cache Manager
  • Update Operations Explanation of why and when to use the update method instead of Put
  • Serialization Cache value serialization and configuration options explained in detail.
  • Cache Synchronization Use case for and explanation of the Cache Backplane feature.
  • Logging The logging abstraction and implementations explained

There is also from source generated html documentation available online.

Examples

Features in Version: 0.9.x

  • One common interface for handling different caching technologies: ICache<T>
  • Configurable by
    • Code with many different paths and a fluent configuration builder
    • Microsoft.Extensions.Configuration
    • App/Web.config
    • See configuration docs
  • Support for different cache providers
  • Serialization can now be configured. Serialization is only needed in distributed caches. If no additional serialization package is installed and configured, Binary serialization will be used (if available) The following are the currently available serialization options:
    • Binary (build in if the full CLR is being used)
    • Json based on the popular Newtonsoft.Json library
    • Json with Gzip compression
    • Protocol Buffer Google's protobuf. The package uses Mark's protobuf-net implementation.
  • Update values with lock or transaction for distributed caches. The interfaced provides a simple update method which internally ensures you work with the latest version. And CacheManager handles version conflicts for you.
  • Logging CacheManager comes with an extensible logging API (see samples).
    • All standard cache operations are logged
    • Based on log levels more or less information will be logged (try Trace and Debug)
    • Current concrete implementation is based on the ASP.NET Core logging. Other implementation of CacheManager's ILoggerFactory might follow.
  • Strongly typed cache interface.
  • Multiple layers By having multiple cache handles managed by CacheManager, you can easily implement layered caches. For example, an in process cache in front of your distributed cache, to make read access faster. CacheManager will synchronize those layers for you.
    • Put and Add operations will always be executed on all cache handles registered on the manager.
    • On Get, there are different configuration options defined by CacheUpdateMode, if the item was available in one cache handle:
      • None: No update across the cache handles on Get
      • Up: Updates the handles "above"
      • All: Updates/Adds the item to all handles
  • Expiration: It is possible to configure the expiration per cache handle within the manager or per cache item. The following are the supported expiration modes:
    • Sliding expiration: On cache hit, the cache item expiration timeout will be extended by the configured amount.
    • Absolute expiration: The cache item will expire after the configured timeout.
  • Cache Regions: Even if some cache systems do not support or implement cache regions, the CacheManager implements the mechanism. This can be used to for example group elements and remove all of them at once.
  • Statistics: Counters for all kind of cache actions.
  • Performance Counters: To be able to inspect certain numbers with perfmon, CacheManager supports performance counters per instance of the manager and per cache handle.
  • Event System: CacheManager triggers events for common cache actions: OnGet, OnAdd, OnPut, OnRemove, OnClear, OnClearRegion
  • System.Web.OutputCache implementation to use CacheManager as OutputCache provider which makes the OutputCache extremely flexible, for example by using a distributed cache like Redis across many web servers.
  • Cache clients synchronization
    • Implemented with the Redis pub/sub feature
    • (Other implementations without Redis might be an option for a later version)
  • Supports .Net 4.0, .Net 4.5, and can be used in cross platform projects with the new .NET Core runtime

[TOC]

About

CacheManager is an open source caching abstraction layer for .NET written in C#. It supports various cache providers and implements many advanced features.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

CacheManager

CacheManager is an open source caching abstraction layer for .NET written in C#. It supports various cache providers and implements many advanced features.

The main goal of the CacheManager package is to make developer's life easier to handle even very complex caching scenarios.
With CacheManager it is possible to implement multiple layers of caching, e.g. in-process caching in front of a distributed cache, in just a few lines of code.

CacheManager is not just an interface to unify the programming model for various cache providers, which will make it very easy to change the caching strategy later on in a project. It also offers additional features, like cache synchronization, concurrent updates, serialization, events, performance counters... The developer can opt-in to those features only if needed.

Build Status

Build ServerStatus
Windows, KoreBuildBuild status
Windows, MSBuildBuild status
Linux, MonoBuild Status

CacheManager Nuget Packages

Package Name.Net 4.0.Net 4.5Minimum .NET Platform Standard version *
[CacheManager.Core] Core.nugetxx1.1
[CacheManager.StackExchange.Redis] Redis.nugetxx1.5
[CacheManager.SystemRuntimeCaching] SystemRuntimeCaching.nugetxx-
[CacheManager.Microsoft.Extensions.Caching.Memory] MSCache.nuget->=4.5.11.3
[CacheManager.Microsoft.Extensions.Configuration] Configuration.nuget-x1.3
[CacheManager.Microsoft.Extensions.Logging] Logging.nuget-x1.3
[CacheManager.Serialization.Json] Json.nugetxx1.2
[CacheManager.Serialization.ProtoBuf] ProtoBuf.nugetxx1.3
[CacheManager.Web] Web.nuget-x-
[CacheManager.Memcached] Memcached.nugetxx-
[CacheManager.Couchbase] Couchbase.nuget-x-

* "Minimum .NET Platform Standard" version means, that at least the listed version per package must be targeted if you want to use it. See the documentation for more details of what .NET platform standard means.

Beta Packages

Beta versions of the CacheManager packages are getting pushed to https://www.myget.org/gallery/cachemanager on each build. Add the following feed, if you want to play with the not yet released bits:

https://www.myget.org/F/cachemanager/api/v3/index.json

To find which check-in created which build, use this build history.

Documentation

Documentation can be found within the articles folder of the Cache Manager's repository and hosted on my website:

  • Getting Started Is a very basic introduction of how to install and use Cache Manager
  • Configuration Explains how to configure Cache Manager via code or configuration file
  • Features and Architecture A more advanced in depth introduction to all features of Cache Manager
  • Update Operations Explanation of why and when to use the update method instead of Put
  • Serialization Cache value serialization and configuration options explained in detail.
  • Cache Synchronization Use case for and explanation of the Cache Backplane feature.
  • Logging The logging abstraction and implementations explained

There is also from source generated html documentation available online.

Examples

Features in Version: 0.9.x

  • One common interface for handling different caching technologies: ICache<T>
  • Configurable by
    • Code with many different paths and a fluent configuration builder
    • Microsoft.Extensions.Configuration
    • App/Web.config
    • See configuration docs
  • Support for different cache providers
  • Serialization can now be configured. Serialization is only needed in distributed caches. If no additional serialization package is installed and configured, Binary serialization will be used (if available) The following are the currently available serialization options:
    • Binary (build in if the full CLR is being used)
    • Json based on the popular Newtonsoft.Json library
    • Json with Gzip compression
    • Protocol Buffer Google's protobuf. The package uses Mark's protobuf-net implementation.
  • Update values with lock or transaction for distributed caches. The interfaced provides a simple update method which internally ensures you work with the latest version. And CacheManager handles version conflicts for you.
  • Logging CacheManager comes with an extensible logging API (see samples).
    • All standard cache operations are logged
    • Based on log levels more or less information will be logged (try Trace and Debug)
    • Current concrete implementation is based on the ASP.NET Core logging. Other implementation of CacheManager's ILoggerFactory might follow.
  • Strongly typed cache interface.
  • Multiple layers By having multiple cache handles managed by CacheManager, you can easily implement layered caches. For example, an in process cache in front of your distributed cache, to make read access faster. CacheManager will synchronize those layers for you.
    • Put and Add operations will always be executed on all cache handles registered on the manager.
    • On Get, there are different configuration options defined by CacheUpdateMode, if the item was available in one cache handle:
      • None: No update across the cache handles on Get
      • Up: Updates the handles "above"
      • All: Updates/Adds the item to all handles
  • Expiration: It is possible to configure the expiration per cache handle within the manager or per cache item. The following are the supported expiration modes:
    • Sliding expiration: On cache hit, the cache item expiration timeout will be extended by the configured amount.
    • Absolute expiration: The cache item will expire after the configured timeout.
  • Cache Regions: Even if some cache systems do not support or implement cache regions, the CacheManager implements the mechanism. This can be used to for example group elements and remove all of them at once.
  • Statistics: Counters for all kind of cache actions.
  • Performance Counters: To be able to inspect certain numbers with perfmon, CacheManager supports performance counters per instance of the manager and per cache handle.
  • Event System: CacheManager triggers events for common cache actions: OnGet, OnAdd, OnPut, OnRemove, OnClear, OnClearRegion
  • System.Web.OutputCache implementation to use CacheManager as OutputCache provider which makes the OutputCache extremely flexible, for example by using a distributed cache like Redis across many web servers.
  • Cache clients synchronization
    • Implemented with the Redis pub/sub feature
    • (Other implementations without Redis might be an option for a later version)
  • Supports .Net 4.0, .Net 4.5, and can be used in cross platform projects with the new .NET Core runtime

[TOC]

About

CacheManager is an open source caching abstraction layer for .NET written in C#. It supports various cache providers and implements many advanced features.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

CacheManager

CacheManager is an open source caching abstraction layer for .NET written in C#. It supports various cache providers and implements many advanced features.

The main goal of the CacheManager package is to make developer's life easier to handle even very complex caching scenarios.
With CacheManager it is possible to implement multiple layers of caching, e.g. in-process caching in front of a distributed cache, in just a few lines of code.

CacheManager is not just an interface to unify the programming model for various cache providers, which will make it very easy to change the caching strategy later on in a project. It also offers additional features, like cache synchronization, concurrent updates, serialization, events, performance counters... The developer can opt-in to those features only if needed.

Build Status

Build ServerStatus
Windows, KoreBuildBuild status
Windows, MSBuildBuild status
Linux, MonoBuild Status

CacheManager Nuget Packages

Package Name.Net 4.0.Net 4.5Minimum .NET Platform Standard version *
[CacheManager.Core] Core.nugetxx1.1
[CacheManager.StackExchange.Redis] Redis.nugetxx1.5
[CacheManager.SystemRuntimeCaching] SystemRuntimeCaching.nugetxx-
[CacheManager.Microsoft.Extensions.Caching.Memory] MSCache.nuget->=4.5.11.3
[CacheManager.Microsoft.Extensions.Configuration] Configuration.nuget-x1.3
[CacheManager.Microsoft.Extensions.Logging] Logging.nuget-x1.3
[CacheManager.Serialization.Json] Json.nugetxx1.2
[CacheManager.Serialization.ProtoBuf] ProtoBuf.nugetxx1.3
[CacheManager.Web] Web.nuget-x-
[CacheManager.Memcached] Memcached.nugetxx-
[CacheManager.Couchbase] Couchbase.nuget-x-

* "Minimum .NET Platform Standard" version means, that at least the listed version per package must be targeted if you want to use it. See the documentation for more details of what .NET platform standard means.

Beta Packages

Beta versions of the CacheManager packages are getting pushed to https://www.myget.org/gallery/cachemanager on each build. Add the following feed, if you want to play with the not yet released bits:

https://www.myget.org/F/cachemanager/api/v3/index.json

To find which check-in created which build, use this build history.

Documentation

Documentation can be found within the articles folder of the Cache Manager's repository and hosted on my website:

  • Getting Started Is a very basic introduction of how to install and use Cache Manager
  • Configuration Explains how to configure Cache Manager via code or configuration file
  • Features and Architecture A more advanced in depth introduction to all features of Cache Manager
  • Update Operations Explanation of why and when to use the update method instead of Put
  • Serialization Cache value serialization and configuration options explained in detail.
  • Cache Synchronization Use case for and explanation of the Cache Backplane feature.
  • Logging The logging abstraction and implementations explained

There is also from source generated html documentation available online.

Examples

Features in Version: 0.9.x

  • One common interface for handling different caching technologies: ICache<T>
  • Configurable by
    • Code with many different paths and a fluent configuration builder
    • Microsoft.Extensions.Configuration
    • App/Web.config
    • See configuration docs
  • Support for different cache providers
  • Serialization can now be configured. Serialization is only needed in distributed caches. If no additional serialization package is installed and configured, Binary serialization will be used (if available) The following are the currently available serialization options:
    • Binary (build in if the full CLR is being used)
    • Json based on the popular Newtonsoft.Json library
    • Json with Gzip compression
    • Protocol Buffer Google's protobuf. The package uses Mark's protobuf-net implementation.
  • Update values with lock or transaction for distributed caches. The interfaced provides a simple update method which internally ensures you work with the latest version. And CacheManager handles version conflicts for you.
  • Logging CacheManager comes with an extensible logging API (see samples).
    • All standard cache operations are logged
    • Based on log levels more or less information will be logged (try Trace and Debug)
    • Current concrete implementation is based on the ASP.NET Core logging. Other implementation of CacheManager's ILoggerFactory might follow.
  • Strongly typed cache interface.
  • Multiple layers By having multiple cache handles managed by CacheManager, you can easily implement layered caches. For example, an in process cache in front of your distributed cache, to make read access faster. CacheManager will synchronize those layers for you.
    • Put and Add operations will always be executed on all cache handles registered on the manager.
    • On Get, there are different configuration options defined by CacheUpdateMode, if the item was available in one cache handle:
      • None: No update across the cache handles on Get
      • Up: Updates the handles "above"
      • All: Updates/Adds the item to all handles
  • Expiration: It is possible to configure the expiration per cache handle within the manager or per cache item. The following are the supported expiration modes:
    • Sliding expiration: On cache hit, the cache item expiration timeout will be extended by the configured amount.
    • Absolute expiration: The cache item will expire after the configured timeout.
  • Cache Regions: Even if some cache systems do not support or implement cache regions, the CacheManager implements the mechanism. This can be used to for example group elements and remove all of them at once.
  • Statistics: Counters for all kind of cache actions.
  • Performance Counters: To be able to inspect certain numbers with perfmon, CacheManager supports performance counters per instance of the manager and per cache handle.
  • Event System: CacheManager triggers events for common cache actions: OnGet, OnAdd, OnPut, OnRemove, OnClear, OnClearRegion
  • System.Web.OutputCache implementation to use CacheManager as OutputCache provider which makes the OutputCache extremely flexible, for example by using a distributed cache like Redis across many web servers.
  • Cache clients synchronization
    • Implemented with the Redis pub/sub feature
    • (Other implementations without Redis might be an option for a later version)
  • Supports .Net 4.0, .Net 4.5, and can be used in cross platform projects with the new .NET Core runtime

[TOC]

About

CacheManager is an open source caching abstraction layer for .NET written in C#. It supports various cache providers and implements many advanced features.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

CacheManager

CacheManager is an open source caching abstraction layer for .NET written in C#. It supports various cache providers and implements many advanced features.

The main goal of the CacheManager package is to make developer's life easier to handle even very complex caching scenarios.
With CacheManager it is possible to implement multiple layers of caching, e.g. in-process caching in front of a distributed cache, in just a few lines of code.

CacheManager is not just an interface to unify the programming model for various cache providers, which will make it very easy to change the caching strategy later on in a project. It also offers additional features, like cache synchronization, concurrent updates, serialization, events, performance counters... The developer can opt-in to those features only if needed.

Build Status

Build ServerStatus
Windows, KoreBuildBuild status
Windows, MSBuildBuild status
Linux, MonoBuild Status

CacheManager Nuget Packages

Package Name.Net 4.0.Net 4.5Minimum .NET Platform Standard version *
[CacheManager.Core] Core.nugetxx1.1
[CacheManager.StackExchange.Redis] Redis.nugetxx1.5
[CacheManager.SystemRuntimeCaching] SystemRuntimeCaching.nugetxx-
[CacheManager.Microsoft.Extensions.Caching.Memory] MSCache.nuget->=4.5.11.3
[CacheManager.Microsoft.Extensions.Configuration] Configuration.nuget-x1.3
[CacheManager.Microsoft.Extensions.Logging] Logging.nuget-x1.3
[CacheManager.Serialization.Json] Json.nugetxx1.2
[CacheManager.Serialization.ProtoBuf] ProtoBuf.nugetxx1.3
[CacheManager.Web] Web.nuget-x-
[CacheManager.Memcached] Memcached.nugetxx-
[CacheManager.Couchbase] Couchbase.nuget-x-

* "Minimum .NET Platform Standard" version means, that at least the listed version per package must be targeted if you want to use it. See the documentation for more details of what .NET platform standard means.

Beta Packages

Beta versions of the CacheManager packages are getting pushed to https://www.myget.org/gallery/cachemanager on each build. Add the following feed, if you want to play with the not yet released bits:

https://www.myget.org/F/cachemanager/api/v3/index.json

To find which check-in created which build, use this build history.

Documentation

Documentation can be found within the articles folder of the Cache Manager's repository and hosted on my website:

  • Getting Started Is a very basic introduction of how to install and use Cache Manager
  • Configuration Explains how to configure Cache Manager via code or configuration file
  • Features and Architecture A more advanced in depth introduction to all features of Cache Manager
  • Update Operations Explanation of why and when to use the update method instead of Put
  • Serialization Cache value serialization and configuration options explained in detail.
  • Cache Synchronization Use case for and explanation of the Cache Backplane feature.
  • Logging The logging abstraction and implementations explained

There is also from source generated html documentation available online.

Examples

Features in Version: 0.9.x

  • One common interface for handling different caching technologies: ICache<T>
  • Configurable by
    • Code with many different paths and a fluent configuration builder
    • Microsoft.Extensions.Configuration
    • App/Web.config
    • See configuration docs
  • Support for different cache providers
  • Serialization can now be configured. Serialization is only needed in distributed caches. If no additional serialization package is installed and configured, Binary serialization will be used (if available) The following are the currently available serialization options:
    • Binary (build in if the full CLR is being used)
    • Json based on the popular Newtonsoft.Json library
    • Json with Gzip compression
    • Protocol Buffer Google's protobuf. The package uses Mark's protobuf-net implementation.
  • Update values with lock or transaction for distributed caches. The interfaced provides a simple update method which internally ensures you work with the latest version. And CacheManager handles version conflicts for you.
  • Logging CacheManager comes with an extensible logging API (see samples).
    • All standard cache operations are logged
    • Based on log levels more or less information will be logged (try Trace and Debug)
    • Current concrete implementation is based on the ASP.NET Core logging. Other implementation of CacheManager's ILoggerFactory might follow.
  • Strongly typed cache interface.
  • Multiple layers By having multiple cache handles managed by CacheManager, you can easily implement layered caches. For example, an in process cache in front of your distributed cache, to make read access faster. CacheManager will synchronize those layers for you.
    • Put and Add operations will always be executed on all cache handles registered on the manager.
    • On Get, there are different configuration options defined by CacheUpdateMode, if the item was available in one cache handle:
      • None: No update across the cache handles on Get
      • Up: Updates the handles "above"
      • All: Updates/Adds the item to all handles
  • Expiration: It is possible to configure the expiration per cache handle within the manager or per cache item. The following are the supported expiration modes:
    • Sliding expiration: On cache hit, the cache item expiration timeout will be extended by the configured amount.
    • Absolute expiration: The cache item will expire after the configured timeout.
  • Cache Regions: Even if some cache systems do not support or implement cache regions, the CacheManager implements the mechanism. This can be used to for example group elements and remove all of them at once.
  • Statistics: Counters for all kind of cache actions.
  • Performance Counters: To be able to inspect certain numbers with perfmon, CacheManager supports performance counters per instance of the manager and per cache handle.
  • Event System: CacheManager triggers events for common cache actions: OnGet, OnAdd, OnPut, OnRemove, OnClear, OnClearRegion
  • System.Web.OutputCache implementation to use CacheManager as OutputCache provider which makes the OutputCache extremely flexible, for example by using a distributed cache like Redis across many web servers.
  • Cache clients synchronization
    • Implemented with the Redis pub/sub feature
    • (Other implementations without Redis might be an option for a later version)
  • Supports .Net 4.0, .Net 4.5, and can be used in cross platform projects with the new .NET Core runtime

[TOC]

About

CacheManager is an open source caching abstraction layer for .NET written in C#. It supports various cache providers and implements many advanced features.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

CacheManager

CacheManager is an open source caching abstraction layer for .NET written in C#. It supports various cache providers and implements many advanced features.

The main goal of the CacheManager package is to make developer's life easier to handle even very complex caching scenarios.
With CacheManager it is possible to implement multiple layers of caching, e.g. in-process caching in front of a distributed cache, in just a few lines of code.

CacheManager is not just an interface to unify the programming model for various cache providers, which will make it very easy to change the caching strategy later on in a project. It also offers additional features, like cache synchronization, concurrent updates, serialization, events, performance counters... The developer can opt-in to those features only if needed.

Build Status

Build ServerStatus
Windows, KoreBuildBuild status
Windows, MSBuildBuild status
Linux, MonoBuild Status

CacheManager Nuget Packages

Package Name.Net 4.0.Net 4.5Minimum .NET Platform Standard version *
[CacheManager.Core] Core.nugetxx1.1
[CacheManager.StackExchange.Redis] Redis.nugetxx1.5
[CacheManager.SystemRuntimeCaching] SystemRuntimeCaching.nugetxx-
[CacheManager.Microsoft.Extensions.Caching.Memory] MSCache.nuget->=4.5.11.3
[CacheManager.Microsoft.Extensions.Configuration] Configuration.nuget-x1.3
[CacheManager.Microsoft.Extensions.Logging] Logging.nuget-x1.3
[CacheManager.Serialization.Json] Json.nugetxx1.2
[CacheManager.Serialization.ProtoBuf] ProtoBuf.nugetxx1.3
[CacheManager.Web] Web.nuget-x-
[CacheManager.Memcached] Memcached.nugetxx-
[CacheManager.Couchbase] Couchbase.nuget-x-

* "Minimum .NET Platform Standard" version means, that at least the listed version per package must be targeted if you want to use it. See the documentation for more details of what .NET platform standard means.

Beta Packages

Beta versions of the CacheManager packages are getting pushed to https://www.myget.org/gallery/cachemanager on each build. Add the following feed, if you want to play with the not yet released bits:

https://www.myget.org/F/cachemanager/api/v3/index.json

To find which check-in created which build, use this build history.

Documentation

Documentation can be found within the articles folder of the Cache Manager's repository and hosted on my website:

  • Getting Started Is a very basic introduction of how to install and use Cache Manager
  • Configuration Explains how to configure Cache Manager via code or configuration file
  • Features and Architecture A more advanced in depth introduction to all features of Cache Manager
  • Update Operations Explanation of why and when to use the update method instead of Put
  • Serialization Cache value serialization and configuration options explained in detail.
  • Cache Synchronization Use case for and explanation of the Cache Backplane feature.
  • Logging The logging abstraction and implementations explained

There is also from source generated html documentation available online.

Examples

Features in Version: 0.9.x

  • One common interface for handling different caching technologies: ICache<T>
  • Configurable by
    • Code with many different paths and a fluent configuration builder
    • Microsoft.Extensions.Configuration
    • App/Web.config
    • See configuration docs
  • Support for different cache providers
  • Serialization can now be configured. Serialization is only needed in distributed caches. If no additional serialization package is installed and configured, Binary serialization will be used (if available) The following are the currently available serialization options:
    • Binary (build in if the full CLR is being used)
    • Json based on the popular Newtonsoft.Json library
    • Json with Gzip compression
    • Protocol Buffer Google's protobuf. The package uses Mark's protobuf-net implementation.
  • Update values with lock or transaction for distributed caches. The interfaced provides a simple update method which internally ensures you work with the latest version. And CacheManager handles version conflicts for you.
  • Logging CacheManager comes with an extensible logging API (see samples).
    • All standard cache operations are logged
    • Based on log levels more or less information will be logged (try Trace and Debug)
    • Current concrete implementation is based on the ASP.NET Core logging. Other implementation of CacheManager's ILoggerFactory might follow.
  • Strongly typed cache interface.
  • Multiple layers By having multiple cache handles managed by CacheManager, you can easily implement layered caches. For example, an in process cache in front of your distributed cache, to make read access faster. CacheManager will synchronize those layers for you.
    • Put and Add operations will always be executed on all cache handles registered on the manager.
    • On Get, there are different configuration options defined by CacheUpdateMode, if the item was available in one cache handle:
      • None: No update across the cache handles on Get
      • Up: Updates the handles "above"
      • All: Updates/Adds the item to all handles
  • Expiration: It is possible to configure the expiration per cache handle within the manager or per cache item. The following are the supported expiration modes:
    • Sliding expiration: On cache hit, the cache item expiration timeout will be extended by the configured amount.
    • Absolute expiration: The cache item will expire after the configured timeout.
  • Cache Regions: Even if some cache systems do not support or implement cache regions, the CacheManager implements the mechanism. This can be used to for example group elements and remove all of them at once.
  • Statistics: Counters for all kind of cache actions.
  • Performance Counters: To be able to inspect certain numbers with perfmon, CacheManager supports performance counters per instance of the manager and per cache handle.
  • Event System: CacheManager triggers events for common cache actions: OnGet, OnAdd, OnPut, OnRemove, OnClear, OnClearRegion
  • System.Web.OutputCache implementation to use CacheManager as OutputCache provider which makes the OutputCache extremely flexible, for example by using a distributed cache like Redis across many web servers.
  • Cache clients synchronization
    • Implemented with the Redis pub/sub feature
    • (Other implementations without Redis might be an option for a later version)
  • Supports .Net 4.0, .Net 4.5, and can be used in cross platform projects with the new .NET Core runtime

[TOC]

About

CacheManager is an open source caching abstraction layer for .NET written in C#. It supports various cache providers and implements many advanced features.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

CacheManager

CacheManager is an open source caching abstraction layer for .NET written in C#. It supports various cache providers and implements many advanced features.

The main goal of the CacheManager package is to make developer's life easier to handle even very complex caching scenarios.
With CacheManager it is possible to implement multiple layers of caching, e.g. in-process caching in front of a distributed cache, in just a few lines of code.

CacheManager is not just an interface to unify the programming model for various cache providers, which will make it very easy to change the caching strategy later on in a project. It also offers additional features, like cache synchronization, concurrent updates, serialization, events, performance counters... The developer can opt-in to those features only if needed.

Build Status

Build ServerStatus
Windows, KoreBuildBuild status
Windows, MSBuildBuild status
Linux, MonoBuild Status

CacheManager Nuget Packages

Package Name.Net 4.0.Net 4.5Minimum .NET Platform Standard version *
[CacheManager.Core] Core.nugetxx1.1
[CacheManager.StackExchange.Redis] Redis.nugetxx1.5
[CacheManager.SystemRuntimeCaching] SystemRuntimeCaching.nugetxx-
[CacheManager.Microsoft.Extensions.Caching.Memory] MSCache.nuget->=4.5.11.3
[CacheManager.Microsoft.Extensions.Configuration] Configuration.nuget-x1.3
[CacheManager.Microsoft.Extensions.Logging] Logging.nuget-x1.3
[CacheManager.Serialization.Json] Json.nugetxx1.2
[CacheManager.Serialization.ProtoBuf] ProtoBuf.nugetxx1.3
[CacheManager.Web] Web.nuget-x-
[CacheManager.Memcached] Memcached.nugetxx-
[CacheManager.Couchbase] Couchbase.nuget-x-

* "Minimum .NET Platform Standard" version means, that at least the listed version per package must be targeted if you want to use it. See the documentation for more details of what .NET platform standard means.

Beta Packages

Beta versions of the CacheManager packages are getting pushed to https://www.myget.org/gallery/cachemanager on each build. Add the following feed, if you want to play with the not yet released bits:

https://www.myget.org/F/cachemanager/api/v3/index.json

To find which check-in created which build, use this build history.

Documentation

Documentation can be found within the articles folder of the Cache Manager's repository and hosted on my website:

  • Getting Started Is a very basic introduction of how to install and use Cache Manager
  • Configuration Explains how to configure Cache Manager via code or configuration file
  • Features and Architecture A more advanced in depth introduction to all features of Cache Manager
  • Update Operations Explanation of why and when to use the update method instead of Put
  • Serialization Cache value serialization and configuration options explained in detail.
  • Cache Synchronization Use case for and explanation of the Cache Backplane feature.
  • Logging The logging abstraction and implementations explained

There is also from source generated html documentation available online.

Examples

Features in Version: 0.9.x

  • One common interface for handling different caching technologies: ICache<T>
  • Configurable by
    • Code with many different paths and a fluent configuration builder
    • Microsoft.Extensions.Configuration
    • App/Web.config
    • See configuration docs
  • Support for different cache providers
  • Serialization can now be configured. Serialization is only needed in distributed caches. If no additional serialization package is installed and configured, Binary serialization will be used (if available) The following are the currently available serialization options:
    • Binary (build in if the full CLR is being used)
    • Json based on the popular Newtonsoft.Json library
    • Json with Gzip compression
    • Protocol Buffer Google's protobuf. The package uses Mark's protobuf-net implementation.
  • Update values with lock or transaction for distributed caches. The interfaced provides a simple update method which internally ensures you work with the latest version. And CacheManager handles version conflicts for you.
  • Logging CacheManager comes with an extensible logging API (see samples).
    • All standard cache operations are logged
    • Based on log levels more or less information will be logged (try Trace and Debug)
    • Current concrete implementation is based on the ASP.NET Core logging. Other implementation of CacheManager's ILoggerFactory might follow.
  • Strongly typed cache interface.
  • Multiple layers By having multiple cache handles managed by CacheManager, you can easily implement layered caches. For example, an in process cache in front of your distributed cache, to make read access faster. CacheManager will synchronize those layers for you.
    • Put and Add operations will always be executed on all cache handles registered on the manager.
    • On Get, there are different configuration options defined by CacheUpdateMode, if the item was available in one cache handle:
      • None: No update across the cache handles on Get
      • Up: Updates the handles "above"
      • All: Updates/Adds the item to all handles
  • Expiration: It is possible to configure the expiration per cache handle within the manager or per cache item. The following are the supported expiration modes:
    • Sliding expiration: On cache hit, the cache item expiration timeout will be extended by the configured amount.
    • Absolute expiration: The cache item will expire after the configured timeout.
  • Cache Regions: Even if some cache systems do not support or implement cache regions, the CacheManager implements the mechanism. This can be used to for example group elements and remove all of them at once.
  • Statistics: Counters for all kind of cache actions.
  • Performance Counters: To be able to inspect certain numbers with perfmon, CacheManager supports performance counters per instance of the manager and per cache handle.
  • Event System: CacheManager triggers events for common cache actions: OnGet, OnAdd, OnPut, OnRemove, OnClear, OnClearRegion
  • System.Web.OutputCache implementation to use CacheManager as OutputCache provider which makes the OutputCache extremely flexible, for example by using a distributed cache like Redis across many web servers.
  • Cache clients synchronization
    • Implemented with the Redis pub/sub feature
    • (Other implementations without Redis might be an option for a later version)
  • Supports .Net 4.0, .Net 4.5, and can be used in cross platform projects with the new .NET Core runtime

[TOC]

About

CacheManager is an open source caching abstraction layer for .NET written in C#. It supports various cache providers and implements many advanced features.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages