暂时将数据存储在ASP.NET Core应用程序中

时间:2017-01-05 02:41:18

标签: c# asp.net-mvc asp.net-core-1.0

我使用单例字典集合来存储用户集合,以便用户可以使用他们的guid访问api来访问他们的信用卡详细信息。

是否有更安全的方式来存储数据而不是使用单例字典集合?它仅用于临时存储 - 不涉及数据库。

2 个答案:

答案 0 :(得分:1)

在信用卡详细信息方面,我可能会质疑单个guid是王国的钥匙......事实上,我也会质疑在任何情况下从API提供完整的信用卡详细信息。

但是,让我们假设这个问题更多的是关于临时存储的问题。

在内存中存储很好,但是你会遇到两个问题。

  1. 当您的应用重新启动时,缓存会丢失"。
  2. 您将无法横向缩放,因为缓存适用于单个应用。您的服务器池中的其他计算机将必须构建自己的缓存(并且您将需要担心粘性会话等其他事情)。
  3. 更好的选择确实是Redis。假设您在Windows上并安装它,则需要下载redis from here。显然,在部署时,您可以使用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. 
        }
    }
    

答案 1 :(得分:0)

应用程序重启时会发生什么?那之后你不丢失数据吗?如果不这样(你的列表是硬编码的),我认为收集没什么问题。但是在每次重启应用程序后,您都会丢失数据并需要重新进入,您可以尝试使用https://redis.io/来缓存用户集合。应用程序重启后,您不会丢失收集数据。