Я использую состояние сеанса ASP.Net, используя NuGet RedisSessionStateProvider.Redis Session State Provider invalidate session
Я потребляя сессии данных из приложения, используя что-то вроде этого:
public UserSessionData GetUserSessionData()
{
if (HttpContext.Current.Session == null || HttpContext.Current.Session["Key"] == null)
{
UserSessionData sessionData = ReadSessionFromDatabase();
HttpContext.Current.Session.Add("Key", sessionData);
return sessionData;
}
else
{
return (UserSessionData)HttpContext.Current.Session["Key"];
}
}
С описанным выше способом, в первый раз значение считывается из базы данных и хранятся в сессии (Redis Cache). В следующий раз, когда запрашивается значение, он считывается из Redis Cache без обращения к SQL.
Он отлично работает. Иногда, когда мне нужно аннулировать значения кеширования и принудительно читать из базы данных, я вызываю HttpContext.Current.Session.Abandon()
. Это делается в качестве примера, когда пользователь меняет свой план.
Представьте ситуацию, когда мне нужно сделать недействительным кеш, поскольку некоторые изменения в базе данных, но это изменение не вызывает пользователя. Это изменение выполняется другим веб-сайтом (некоторым внутренним веб-сайтом для управления пользователями) или выполняется Webhook (уведомление о смене плана для пользователя). Как бы вы заставили пользователя повторно использовать данные из базы данных (удалить кэшированные данные) когда это не является триггером в HttpContext?
Я проверил промывку всего кекса redis flushdb
, и он работает. Но, вне курса, он заставит весь сеанс пользователя читать данные снова. Как бы вы отменили кеширование только для некоторого пользователя?
как я знаю Sesssion ID вне приложения? В качестве примера можно получить все идентификаторы, связанные с пользователем. –