IMemoryCache & IChangeToken 紀錄
試作紀錄。
IMemeryCache 試用紀錄
[Inject] IMemoryCache _cache { get; init; }
var meta = GetAuthInfo();
_cache.Set<AuthInfo>("AuthInfo", meta, TimeSpan.FromMinutes(20));
// 存入 MemoryCachae 一份資料,有效期限20分鐘。using System.Threading;
var meta = GetAuthInfo();
var cancelSrc = new CancellationTokenSource(TimeSpan.FromMinutes(20));
_cache.Set<AuthInfo>("AuthInfo", meta
, new CancellationChangeToken(cancelSrc.Token));
// 存入 MemoryCachae 一份資料,有效期限20分鐘,
// 可以到期前取消。 using System.Threading;
var meta = GetAuthInfo();
var cancelSrc = new CancellationTokenSource();
var option = new MemoryCacheEntryOptions()
.SetAbsoluteExpiration(TimeSpan.FromMinutes(20))
.RegisterPostEvictionCallback(CacheEvictionHandler, this)
.AddExpirationToken(new CancellationChangeToken(cancelSrc.Token));
_cache.Set<int>("Counter", meta, option);
// 存入 MemoryCachae 一份資料,有效期限20分鐘,
// 可以中途取消。
// 當資料被驅逐(Eviction)時觸發訊息。注意:不是過時(expired)觸發是被驅逐(Eviction)時觸發。
// ※當時間過期,只是設定成無效還沒移除,直到下一筆資料取代才會被驅逐。
/// Memory Cache 被驅逐(Eviction)時觸發。
void CacheEvictionHandler(object key, object value, EvictionReason reason, object state)
{
Log.Trace($"Cache Eviction >> time:{DateTime.Now:HH:mm:ss}, reason:{reason}, key:{key}, value:{value}, state:{state}");
} 小結
Last updated