В своём приложении я использую Redis в качестве кэш-хранилища, куда в процессе работы заносятся разные данные. Некоторые хранятся там временно (минут 5), некоторые без ограничения по времени.
public void ConfigureServices(IServiceCollection services)
{
...
services.AddDistributedRedisCache(option =>
{
option.Configuration = Configuration["Redis:Address"];
option.InstanceName = "...";
});
}
Также у меня есть метод, вызываемый при закрытии приложения
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IApplicationLifetime applicationLifetime)
{
applicationLifetime.ApplicationStopping.Register(OnShutdown);
...
}
private void OnShutdown()
{
...
}
Каким образом я могу достать в методе OnShutdow
кэш-хранилище и полностью очистить его, чтобы при следующем запуске приложения данных о его предыдущей работе не было?
Одно из возможных решений ( и видимо единственное ) - выполнение операции через командную строку
private void OnShutdown()
{
if(RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
ExecuteCommand("redis-cli flushall");
...
}
public void ExecuteCommand(string command)
{
Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = "/bin/bash";
proc.StartInfo.Arguments = "-c \" " + command + " \"";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.Start();
Console.Write("Execution result: ");
while (!proc.StandardOutput.EndOfStream)
{
Console.WriteLine(proc.StandardOutput.ReadLine());
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Выполняю одно из заданий курса по С#, которое звучит так:
Надо программно сделать аналог метода group by по нескольким полям на язык с #, но проблема в том, что эти поля заранее не определены, и в зависимости...