- Based on oceanweb/azuretablestoragecache but with lower dependencies.
- Extra added logic to use strongly typed objects with IDistributedCache instead of byte arrays.
- Multiple versions are available, see table below for details.
Version | Dependencies | Information |
---|---|---|
Windows.Azure.Storage | This dependency is declared deprecated by Microsoft. | |
Microsoft.Azure.Cosmos.Table | ||
Microsoft.Azure.Cosmos.Table - Preview | This is still a preview version. | |
Azure.Data.Tables |
c# code:
// Configure in code
services.Configure<AzureTableStorageCacheOptions>(options =>
{
options.TableName = "CacheTest";
options.PartitionKey = "ConsoleApp";
options.ConnectionString = "UseDevelopmentStorage=true;";
options.ExpiredItemsDeletionInterval = TimeSpan.FromHours(24);
});
- If the TableName does not exists, it's created. If you want to disable this behaviour, set the
options.CreateTableIfNotExists
tofalse
. - When an item is retrieved or added to to the cache, a periodic interval scan can be done to find and delete expired items in the cache. Default this is set to
null
, which means that this functionality is disabled. If you want to change this, set theoptions.ExpiredItemsDeletionInterval
to a different value, likeTimeSpan.FromMinutes(30)
.
appsettings.json:
"AzureTableStorageCacheOptions": {
"ConnectionString": "UseDevelopmentStorage=true;",
"TableName": "CacheTest",
"PartitionKey": "ConsoleApp"
}
c# code:
// Configure via app.setttings
services.Configure<AzureTableStorageCacheOptions>(Configuration.GetSection("AzureTableStorageCacheOptions"));
services.AddDistributedAzureTableStorageCache();
IDistributedCache cache = ... // injected via DI
var test = new TestModel
{
Id = 1,
Name = "Test 1"
};
// Set an item in the cache using an expiration from 30 seconds
var cacheOptions = new DistributedCacheEntryOptions { AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(30) };
await cache.SetAsync("t1", test, cacheOptions);
// Retrieve the item from the cache
var t2 = await cache.GetAsync<TestModel>("t1");
logger.LogInformation("t2 : {TestModel}", JsonConvert.SerializeObject(t2));