Basing on https://learn.microsoft.com/en-us/aspnet/core/performance/caching/distributed and modified accordingly:
The Distributed MySQL Server Cache implementation (AddDistributedMySqlCache) allows the distributed cache to use a MySQL Server database as its backing store. To create a MySQL Server cached item table in a MySQL Server instance, you can use the dotnet-mysql-cache tool. The tool creates a table with the name and schema that you specify.
CLI tool (globally) can be done with
dotnet tool install --global Pomelo.Extensions.Caching.MySqlConfig.Tools
Now, create a table in MySQL Server by running the dotnet mysql-cache create
command. Provide the MySQL Server connection string, instance (for example server=192.169.0.1
), table name (for example, NewTableName
) and optional database (for example, MyDatabaseName
):
dotnet mysql-cache create "server=192.169.0.1;user id=userName;password=P4ssword123!;port=3306;database=MyDatabaseName;Allow User Variables=True" "NewTableName" --databaseName "MyDatabaseName"
A message is logged to indicate that the tool was successful:
Table and index were created successfully.
The table created by the dotnet-mysql-cache
tool has the following schema:
Note
An app should manipulate cache values using an instance of IDistributedCache, not any other.
The example snippet how to implement MySql Server cache in Program.cs
:
builder.Services.AddDistributedMySqlCache(options =>
{
options.ConnectionString = builder.Configuration.GetConnectionString("DistCache_ConnectionString");
options.SchemaName = "MyDatabaseName"; //optional
options.TableName = "NewTableName"; //required
});
Note
A ConnectionString (and optionally, SchemaName and TableName) are typically stored outside of source control (for example, stored by the Secret Manager or in appsettings.json
/appsettings.{Environment}.json
files). The connection string may contain credentials that should be kept out of source control systems.
One can use same technique as described in this section Use the distributed cache