我在 .net 核心中有 api 專案。當我為此 api 重新啟動 azure 服務時,IDistributedCache 被清除。重新啟動后,從 GetSubscriptionRecord() 方法獲取資料時,它回傳 null。
我的 startup.cs 包含
services.AddDistributedMemoryCache();
services.AddSingleton<SubscriptionStore>();
和
public class SubscriptionStore
{
private readonly IDistributedCache _cache;
public SubscriptionStore(IDistributedCache memoryCache)
{
_cache = memoryCache ?? throw new ArgumentException(nameof(memoryCache));
}
/// <summary>
/// Add a subscription record to the store
/// </summary>
/// <param name="record">The subscription to add</param>
public void SaveSubscriptionRecord(SubscriptionRecord record)
{
var options = new DistributedCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromHours(10));
_cache.SetAsync(record.Id, ToByteArray<SubscriptionRecord>(record), options);
}
/// <summary>
/// Get a subscription record
/// </summary>
/// <param name="subscriptionId">The subscription ID</param>
/// <returns>The subscription record if found, null if not</returns>
public async Task<SubscriptionRecord> GetSubscriptionRecord(string subscriptionId)
{
var record = await _cache.GetAsync(subscriptionId);
return FromByteArray<SubscriptionRecord>(record);
}
}
uj5u.com熱心網友回復:
看起來您正在使用存盤在應用程式記憶體中的記憶體快取。這意味著它會在應用程式停止/重新啟動后被銷毀。
有關詳細資訊,請參閱檔案鏈接
分布式記憶體快取 (AddDistributedMemoryCache) 是 IDistributedCache 的框架提供的實作,用于將專案存盤在記憶體中。分布式記憶體快取不是真正的分布式快取。快取項由應用程式實體存盤在運行應用程式的服務器上。
您可以嘗試配置一些遠程快取存盤,例如Redis、SQL Server或NCache 集群
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/404853.html
標籤:
