Easy.Cache
1.0.4
dotnet add package Easy.Cache --version 1.0.4
NuGet\Install-Package Easy.Cache -Version 1.0.4
<PackageReference Include="Easy.Cache" Version="1.0.4" />
<PackageVersion Include="Easy.Cache" Version="1.0.4" />
<PackageReference Include="Easy.Cache" />
paket add Easy.Cache --version 1.0.4
#r "nuget: Easy.Cache, 1.0.4"
#:package Easy.Cache@1.0.4
#addin nuget:?package=Easy.Cache&version=1.0.4
#tool nuget:?package=Easy.Cache&version=1.0.4
Easy.Cache
Easy.Cache is a high-performance, lightweight, and flexible caching library for .NET applications. It simplifies cache management by providing a unified API for In-Memory, Distributed (Redis), and Multi-Layer (Hybrid) caching strategies.
It is designed with Enterprise Best Practices in mind, offering full async/await support with CancellationToken, strong typing, and modular architecture.
Features
- ** Multi-Layer Caching:** Automatically syncs Local Memory Cache (L1) with Distributed Redis Cache (L2) for ultra-fast reads and data consistency.
- ** Async & Cancellable:** Fully supports
async/awaitandCancellationTokento prevent wasted resources on cancelled requests. - ** Plug & Play:** Simple integration with .NET Dependency Injection (
IServiceCollection). - ** Modular Design:** Separated into
Abstractions,Providers, andSerializersnamespaces for cleaner architecture. - ** Multi-Target:** Supports
.NET 10,.NET 8,.NET 6,.NET Standard 2.0/2.1, and.NET Framework 4.7.2+.
Installation
Install via NuGet Package Manager:
Install-Package Easy.Cache
Or via .NET CLI:
dotnet add package Easy.Cache
Usage
1. Service Registration (Program.cs)
Register the caching strategy you need in your Program.cs.
using Easy.Cache; // Core Namespace
var builder = WebApplication.CreateBuilder(args);
// Option A: In-Memory Cache (Single Server)
builder.Services.AddEasyCacheMemory();
// Option B: Redis Cache (Distributed)
builder.Services.AddEasyCacheRedis("localhost:6379,password=...");
// Option C: Multi-Layer Cache (Best of Both Worlds)
// Reads from Memory first (fast), falls back to Redis (reliable).
builder.Services.AddEasyCacheMultiLayer("localhost:6379,password=...");
var app = builder.Build();
2. Using CacheManager (Controller Example)
Inject CacheManager into your controllers or services.
using Easy.Cache;
using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("[controller]")]
public class ProductsController : ControllerBase
{
private readonly CacheManager _cache;
public ProductsController(CacheManager cache)
{
_cache = cache;
}
[HttpGet("{id}")]
public async Task<IActionResult> GetProduct(int id, CancellationToken cancellationToken)
{
string cacheKey = $"product:{id}";
// 1. Try to get from cache
var product = await _cache.GetAsync<Product>(cacheKey, cancellationToken);
if (product != null)
{
return Ok(product); // Hit!
}
// 2. If not found, fetch from DB (Simulated)
product = new Product { Id = id, Name = "Smartphone", Price = 999 };
// 3. Set to cache
// Absolute Expiration: 10 minutes (Removed after 10m)
// Sliding Expiration: 2 minutes (Reset timer if accessed within 2m)
await _cache.SetAsync(
cacheKey,
product,
absoluteExpiration: TimeSpan.FromMinutes(10),
slidingExpiration: TimeSpan.FromMinutes(2),
cancellationToken: cancellationToken
);
return Ok(product);
}
[HttpDelete("{id}")]
public async Task<IActionResult> RemoveProduct(int id, CancellationToken cancellationToken)
{
await _cache.RemoveAsync($"product:{id}", cancellationToken);
return NoContent();
}
}
Expiration Policies
| Provider | Absolute Expiration | Sliding Expiration | Note |
|---|---|---|---|
| MemoryCache | ✅ Supported | ✅ Supported | Full support for both strategies. |
| Redis | ✅ Supported | ❌ Not Supported | Redis native "TTL" is used as Absolute Expiration. |
Export to Sheets
Note: If
absoluteExpirationandslidingExpirationare both null, the cache entry will remain indefinitely until manually removed or evicted by memory pressure.
Architecture
The library follows a clean separation of concerns:
Easy.Cache.Abstractions: Interfaces (ICacheProvider,ISerializer). Use this namespace if you are building libraries that depend on Easy.Cache.Easy.Cache.Providers: Concrete implementations (RedisCacheProvider,MemoryCacheProvider,MultiLayerCacheProvider).Easy.Cache.Serializers: Serialization logic (JsonCacheSerializer).Easy.Cache: The main entry point (CacheManager,ServiceCollectionExtensions).
Contributing
Contributions and suggestions are welcome. Please open an issue or submit a pull request.
Contact
For questions, contact us via elmin.alirzayev@gmail.com or GitHub.
License
This project is licensed under the MIT License.
© 2025 Elmin Alirzayev / Easy Code Tools
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 is compatible. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 is compatible. net471 was computed. net472 was computed. net48 is compatible. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETFramework 4.7
- Microsoft.Extensions.Caching.Memory (>= 10.0.2)
- StackExchange.Redis (>= 2.10.1)
- System.Text.Json (>= 10.0.2)
-
.NETFramework 4.8
- Microsoft.Extensions.Caching.Memory (>= 10.0.2)
- StackExchange.Redis (>= 2.10.1)
- System.Text.Json (>= 10.0.2)
-
.NETStandard 2.0
- Microsoft.Extensions.Caching.Memory (>= 10.0.2)
- StackExchange.Redis (>= 2.10.1)
- System.Text.Json (>= 10.0.2)
-
.NETStandard 2.1
- Microsoft.Extensions.Caching.Memory (>= 10.0.2)
- StackExchange.Redis (>= 2.10.1)
- System.Text.Json (>= 10.0.2)
-
net10.0
- Microsoft.Extensions.Caching.Memory (>= 10.0.2)
- StackExchange.Redis (>= 2.10.1)
-
net6.0
- Microsoft.Extensions.Caching.Memory (>= 10.0.2)
- StackExchange.Redis (>= 2.10.1)
-
net7.0
- Microsoft.Extensions.Caching.Memory (>= 10.0.2)
- StackExchange.Redis (>= 2.10.1)
-
net8.0
- Microsoft.Extensions.Caching.Memory (>= 10.0.2)
- StackExchange.Redis (>= 2.10.1)
-
net9.0
- Microsoft.Extensions.Caching.Memory (>= 10.0.2)
- StackExchange.Redis (>= 2.10.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
-