Microsoft.Extensions.Caching.Postgres
1.1.0
Prefix Reserved
dotnet add package Microsoft.Extensions.Caching.Postgres --version 1.1.0
NuGet\Install-Package Microsoft.Extensions.Caching.Postgres -Version 1.1.0
<PackageReference Include="Microsoft.Extensions.Caching.Postgres" Version="1.1.0" />
<PackageVersion Include="Microsoft.Extensions.Caching.Postgres" Version="1.1.0" />
<PackageReference Include="Microsoft.Extensions.Caching.Postgres" />
paket add Microsoft.Extensions.Caching.Postgres --version 1.1.0
#r "nuget: Microsoft.Extensions.Caching.Postgres, 1.1.0"
#:package Microsoft.Extensions.Caching.Postgres@1.1.0
#addin nuget:?package=Microsoft.Extensions.Caching.Postgres&version=1.1.0
#tool nuget:?package=Microsoft.Extensions.Caching.Postgres&version=1.1.0
Microsoft.Extensions.Caching.Postgres
A distributed cache implementation using PostgreSQL for .NET applications.
Installation
Install the NuGet package:
dotnet add package Microsoft.Extensions.Caching.Postgres
Configuration
1. Configure appsettings.json
Add the following configuration sections to your appsettings.json file. It's also recommended to configure your connection string to use connection pooling:
"ConnectionStrings": {
"PostgresCache": "Host=localhost;Port=5432;Username=postgres;Password=yourpassword;Database=yourdatabase;Pooling=true;MinPoolSize=0;MaxPoolSize=100;Timeout=15;"
},
"PostgresCache": {
"SchemaName": "public",
"TableName": "cache",
"CreateIfNotExists": true,
"UseWAL": false,
"ExpiredItemsDeletionInterval": "00:30:00",
"DefaultSlidingExpiration": "00:20:00"
}
Configuration Options
| Property | Required | Default | Description |
|---|---|---|---|
ConnectionString |
yes | PostgreSQL connection string | |
SchemaName |
yes | Schema name for the cache table | |
TableName |
yes | Name of the cache table | |
CreateIfNotExists |
no | false |
Whether to create the table if it doesn't exist |
UseWAL |
no | false |
Whether to use Write-Ahead Logging |
ExpiredItemsDeletionInterval |
no | 00:30:00 |
Interval for cleaning up expired items (default: 30 minutes) |
DefaultSlidingExpiration |
no | 00:20:00 |
Default sliding expiration for cache entries |
2. Register the Service
Using Configuration Binding
using Microsoft.Extensions.DependencyInjection;
var builder = WebApplication.CreateBuilder(args);
// Register Postgres distributed cache
builder.Services.AddDistributedPostgresCache(options => {
options.ConnectionString = builder.Configuration.GetConnectionString("PostgresCache");
options.SchemaName = builder.Configuration.GetValue<string>("PostgresCache:SchemaName", "public");
options.TableName = builder.Configuration.GetValue<string>("PostgresCache:TableName", "cache");
options.CreateIfNotExists = builder.Configuration.GetValue<bool>("PostgresCache:CreateIfNotExists", true);
options.UseWAL = builder.Configuration.GetValue<bool>("PostgresCache:UseWAL", false);
// Optional: Configure expiration settings
var expirationInterval = builder.Configuration.GetValue<string>("PostgresCache:ExpiredItemsDeletionInterval");
if (!string.IsNullOrEmpty(expirationInterval) && TimeSpan.TryParse(expirationInterval, out var interval)) {
options.ExpiredItemsDeletionInterval = interval;
}
var slidingExpiration = builder.Configuration.GetValue<string>("PostgresCache:DefaultSlidingExpiration");
if (!string.IsNullOrEmpty(slidingExpiration) && TimeSpan.TryParse(slidingExpiration, out var sliding)) {
options.DefaultSlidingExpiration = sliding;
}
});
var app = builder.Build();
3. Using the Cache
Once configured, you can inject and use IDistributedCache in your services:
using Microsoft.Extensions.Caching.Distributed;
public class MyService {
private readonly IDistributedCache _cache;
public MyService(IDistributedCache cache) {
_cache = cache;
}
public async Task<string> GetDataAsync(string key) {
var cachedData = await _cache.GetStringAsync(key);
if (cachedData == null) {
// Fetch data from source
var data = await FetchDataFromSource();
// Cache the data with options
var options = new DistributedCacheEntryOptions {
AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(30),
SlidingExpiration = TimeSpan.FromMinutes(5)
};
await _cache.SetStringAsync(key, data, options);
return data;
}
return cachedData;
}
}
Environment Variables
You can also configure the cache using environment variables with the prefix PostgresCache__:
PostgresCache__ConnectionString="Host=localhost;Port=5432;Username=postgres;Password=yourpassword;Database=yourdatabase"
PostgresCache__SchemaName="public"
PostgresCache__TableName="cache"
PostgresCache__CreateIfNotExists="true"
| 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 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 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 is compatible. 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. |
-
.NETFramework 4.7.2
- Microsoft.Bcl.TimeProvider (>= 9.0.7)
- Microsoft.Extensions.Caching.Abstractions (>= 9.0.7)
- Microsoft.Extensions.Options (>= 9.0.7)
- Npgsql (>= 8.0.7)
-
.NETStandard 2.0
- Microsoft.Bcl.TimeProvider (>= 9.0.7)
- Microsoft.Extensions.Caching.Abstractions (>= 9.0.7)
- Microsoft.Extensions.Options (>= 9.0.7)
- Npgsql (>= 8.0.7)
-
net8.0
- Microsoft.Extensions.Caching.Abstractions (>= 9.0.7)
- Microsoft.Extensions.Options (>= 9.0.7)
- Npgsql (>= 9.0.3)
-
net9.0
- Microsoft.Extensions.Caching.Abstractions (>= 9.0.7)
- Microsoft.Extensions.Options (>= 9.0.7)
- Npgsql (>= 9.0.3)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Microsoft.Extensions.Caching.Postgres:
| Package | Downloads |
|---|---|
|
Aiska.IdempotentApi.Hybrid
A .NET library for creating idempotent APIs using Hybrid Cache, ensuring that requests are processed only once, even if received multiple times. |
GitHub repositories
This package is not used by any popular GitHub repositories.