簡體   English   中英

在ASP.NET Core應用程序中臨時存儲數據

[英]Storing data temporarily in an ASP.NET Core application

我正在使用一個單例字典集合來存儲用戶集合,以便用戶可以使用其GUID訪問api來訪問其信用卡詳細信息。

有沒有比使用單例字典集合更安全的數據存儲方式? 它僅用於臨時存儲-不涉及數據庫。

我可能會質疑單個guid是信用卡詳細信息王國的鑰匙...實際上,我也會質疑在任何情況下從API給出完整的信用卡詳細信息。

但是,讓我們假設問題更多是關於臨時存儲的。

在內存中存儲是可以的,但是您會遇到兩個問題。

  1. 重新啟動您的應用程序后,緩存將“丟失”。
  2. 您將無法水平擴展,因為緩存是針對單個應用程序的。 服務器池中的其他計算機將必須構建自己的緩存(並且您還有其他問題,例如粘性會話,等等)。

確實,Redis是一個更好的選擇。 如果您在Windows上,則需要從此處下載redis並進行安裝。 顯然,在部署時,您可以使用Azure Redis等。對於代碼,幸運的是Microsoft已為您完成了大部分工作。 主要來自這篇文章: http : //dotnetcoretutorials.com/2017/01/06/using-redis-cache-net-core/

在您的.net核心應用中安裝此軟件包。

Install-Package Microsoft.Extensions.Caching.Redis

在startup.cs的configure services方法中,您需要將Redis添加為緩存服務。 您這樣做:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();

    services.AddDistributedRedisCache(option =>
    {
        option.Configuration = "127.0.0.1";
        option.InstanceName = "master";
    });
}

然后,您可以僅在控制器/服務中請求IDistributedCache。 類似於以下內容:

public class HomeController : Controller
{
    private readonly IDistributedCache _distributedCache;

    public HomeController(IDistributedCache distributedCache)
    {
        _distributedCache = distributedCache;
    }

    [HttpGet]
    public async Task<string> Get()
    {
        //You can access _distributedCache here. 
    }
}

應用程序重新啟動時會發生什么? 之后您不會丟失數據嗎? 如果沒有(您的列表是硬編碼的),我認為收藏沒有錯。 但是,在每個應用程序重新啟動后,您將丟失數據並需要重新輸入,可以嘗試像https://redis.io/一樣緩存用戶集合。 重新啟動應用程序后,您將不會丟失您的收集數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM