KeyLockedMemoryCache 1.0.0
See the version list below for details.
dotnet add package KeyLockedMemoryCache --version 1.0.0
NuGet\Install-Package KeyLockedMemoryCache -Version 1.0.0
<PackageReference Include="KeyLockedMemoryCache" Version="1.0.0" />
<PackageVersion Include="KeyLockedMemoryCache" Version="1.0.0" />
<PackageReference Include="KeyLockedMemoryCache" />
paket add KeyLockedMemoryCache --version 1.0.0
#r "nuget: KeyLockedMemoryCache, 1.0.0"
#:package KeyLockedMemoryCache@1.0.0
#addin nuget:?package=KeyLockedMemoryCache&version=1.0.0
#tool nuget:?package=KeyLockedMemoryCache&version=1.0.0
KeyLockedMemoryCache
KeyLockedMemoryCache es una librería ligera, rápida y sin dependencias externas que proporciona un sistema de caché en memoria con bloqueo por clave, evitando cargas duplicadas y garantizando acceso thread-safe en aplicaciones .NET.
Funciona en:
- .NET Framework 4.6.1+
- .NET Core 2.0+
- .NET 5/6/7/8
- C#
- VB.NET
- Microservicios en IIS o entornos sin réplicas
Ideal para escenarios donde se necesita un caché local extremadamente rápido sin la complejidad de Redis u otros sistemas distribuidos.
🚀 Características principales
- Thread-safe mediante locking por clave
- Doble chequeo para evitar cargas redundantes
- Cache-aside pattern listo para producción
- Limpieza automática de locks al expirar las claves
- Sin dependencias externas
- Compatible con todo .NET moderno
- Ultra rápido (in-process, sin serialización ni red)
📦 Instalación
Desde NuGet: Install-Package KeyLockedMemoryCache
🧠 Uso básico en C#
----csharp using KeyLockedMemoryCache;
var cache = new InternalCache<User>(30); // Expiración en minutos
var user = cache.GetOrAdd("user", userId, () ⇒ { return LoadUserFromDatabase(userId); });
🧠 Uso básico en VB.NET Imports KeyLockedMemoryCache
Dim cache As New InternalCache(Of User)(30)
Dim user = cache.GetOrAdd("user", userId, Function() Return LoadUserFromDatabase(userId) End Function)
🧩 API InternalCache<T>(int expirationMinutes) Crea una instancia de caché con expiración absoluta por minutos. T GetOrAdd(string prefix, object keyValue, Func<T> loader)
- Devuelve el valor desde caché si existe.
- Si no existe:
- Bloquea por clave
- Ejecuta el loader una sola vez
- Guarda el resultado en caché
- Devuelve el valor void Remove(string prefix, object keyValue) Elimina una entrada del caché y su lock asociado.
🏎️ Rendimiento KeyLockedMemoryCache está diseñado para ser extremadamente rápido:
- Acceso en nanosegundos (in-process)
- Sin serialización
- Sin red
- Sin DI obligatorio
- Sin dependencias pesadas Es ideal para microservicios sin réplicas, aplicaciones en IIS, APIs internas y cualquier escenario donde Redis sería excesivo.
🛠️ Ejemplos de uso comunes
- Cachear resultados de consultas a base de datos
- Cachear configuraciones o catálogos
- Evitar llamadas repetidas a servicios externos
- Reducir carga en microservicios internos
- Mejorar rendimiento en APIs de alta concurrencia
📄 Licencia MIT License.
✨ Autor Desarrollado por Cristian. Optimizado para arquitecturas reales, alto rendimiento y simplicidad.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. 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 was computed. 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 was computed. 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 was computed. 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 was computed. 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 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. 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. |
-
.NETStandard 2.0
- System.Runtime.Caching (>= 10.0.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.