0
Memory Cachedデータを無効にし、Redisのデータの新しいコピーを読み込むために使用する新しいクラスを作成しました。 また、Redisのpub/sub機能によって異なります。私はASP.NET MVCアプリケーションでこのクラスを使用Redis Pub/Subを使用してChangeMonitorを使用してメモリキャッシュを無効にする
public class RedisChangeMonitor : ChangeMonitor
{
private string uniqueId;
private ISubscriber subscriber;
private static Lazy<ConnectionMultiplexer> lazyConnection = new Lazy<ConnectionMultiplexer>(() =>
{
ConnectionMultiplexer connectionMultiplexer = ConnectionMultiplexer.Connect(ConfigurationManager.ConnectionStrings["RedisConnectionString"].ConnectionString);
connectionMultiplexer.PreserveAsyncOrder = false;
return connectionMultiplexer;
});
public ConnectionMultiplexer Connection
{
get
{
return lazyConnection.Value;
}
}
public override string UniqueId
{
get
{
return uniqueId;
}
}
public RedisChangeMonitor(IList<string> cacheKeys)
{
bool isInitialized = false;
try
{
this.uniqueId = Guid.NewGuid().ToString();
subscriber = this.Connection.GetSubscriber();
subscriber.Subscribe(RedisChannels.ChangeNotification, (channel, data) =>
{
string cacheKey = data;
if (cacheKeys.Contains(cacheKey))
{
base.OnChanged(null);
}
});
isInitialized = true;
}
finally
{
base.InitializationComplete();
if (!isInitialized)
Dispose(true);
}
}
~RedisChangeMonitor()
{
Dispose(false);
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (subscriber != null)
{
subscriber.Unsubscribe(RedisChannels.ChangeNotification);
}
}
}
}
、私はDisposeメソッドで退会していない場合は、サーバーのメモリは約1時間後に完全であることを見てきました。
Disposeメソッドの登録を解除した場合、メモリの状態はokです。しかし、メモリキャッシュは無効にされません。