Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过EasyCaching在.NET内核中实现Memcache_C#_Asp.net Core_Caching_Asp.net Web Api - Fatal编程技术网

C# 通过EasyCaching在.NET内核中实现Memcache

C# 通过EasyCaching在.NET内核中实现Memcache,c#,asp.net-core,caching,asp.net-web-api,C#,Asp.net Core,Caching,Asp.net Web Api,我使用此链接将提供程序设置为Memcached 1) 我通过Nuget下载EasyCaching.Memcached 2) 在startup.csclass中添加配置 public void ConfigureServices(IServiceCollection services) { services.AddEasyCaching(option => { //use memmemcachedory cache

我使用此链接将提供程序设置为Memcached

1) 我通过Nuget下载
EasyCaching.Memcached

2) 在
startup.cs
class中添加配置

 public void ConfigureServices(IServiceCollection services)
    {
        services.AddEasyCaching(option =>
        {
            //use memmemcachedory cache
            option.UseMemcached(config =>
            {
                config.DBConfig.AddServer("127.0.0.1", 11211);
            });
        });
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    }
以及
app.UseEasyCaching()行输入
配置

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseEasyCaching();

        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseMvc();
    }
3) 最后打电话给供应商

[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
    private readonly IEasyCachingProvider _provider;

    public ValuesController(IEasyCachingProvider provider)
    {
        this._provider = provider;
    }

    // GET api/values
    [HttpGet]
    public async Task<IActionResult> GetAsync()
    {
        try
        {
            await _provider.RemoveAsync("demo");

            //Set Async  
            await this._provider.SetAsync("demo", "Hello world", TimeSpan.FromMinutes(1));


            //Get Async      
            var res = await this._provider.GetAsync<string>("demo");

            return Ok(res);
        }
        catch(Exception ex)
        {
            return StatusCode(500, ex.Message);
        }

    }
}
我的控制器

public class ValuesController : ControllerBase
{
    private readonly IEasyCachingProvider _provider;

    public ValuesController(IEasyCachingProvider provider)
    {
        this._provider = provider;
    }

    // GET api/values
    [HttpGet]
    public IActionResult Get()
    {
        try
        {
            //Set
            _provider.Set<string>("demo", "Hello", TimeSpan.FromMinutes(1));

            //Get
            var res = _provider.Get<string>("demo");

            return Ok(res);
        }
        catch(Exception ex)
        {
            return StatusCode(500, ex.Message);
        }

    }
}
公共类值控制器:控制器库
{
私有只读IEasyCachingProvider\u提供商;
公共价值控制人(IEasyCachingProvider提供商)
{
此._provider=provider;
}
//获取api/值
[HttpGet]
public IActionResult Get()
{
尝试
{
//设置
_provider.Set(“demo”,“Hello”,TimeSpan.FromMinutes(1));
//得到
var res=_provider.Get(“demo”);
返回Ok(res);
}
捕获(例外情况除外)
{
返回状态码(500,例如消息);
}
}
}

例外情况是,它试图连接到本地机器上端口11111的Memcached服务器,但找不到它

EasyCaching库只帮助您连接到缓存。它实现的不同提供程序可以帮助您连接到任何缓存数据库。在的情况下,它假定您已经有了服务器设置

同样,假设您已经有了服务器设置

如果您没有任何外部缓存服务器设置,那么您可以查看,它会将您的缓存保留在应用程序的内存中。这很容易,但当应用程序重新启动时,它也会消失(这对您来说可能没问题)


或者您可以查看,它可以将缓存存储在SQLite文件中,而SQLite文件只是文件系统中的一个.db文件。不需要外部缓存服务器。

您的Memcached服务器是否在本地计算机上运行?如果是,它将配置为侦听哪个端口?该异常告诉您它没有在端口
11111
上侦听。我没有配置任何内容。在本教程中,它不是必需的。该教程展示了如何“处理memcached服务器的数据”。它假设您已经有一个服务器。如果我使用
Redis
,我也应该创建服务器吗?我认为它会动态地保存在缓存中,所有的工作都是一行完成的。对我来说,有点难以理解在你的链接中该做什么,因为它看起来不像教程。还有一个问题,我在注释之后添加代码,问题是我在
\u provider.Get(“demo”)之后取nullpublic class ValuesController : ControllerBase
{
    private readonly IEasyCachingProvider _provider;

    public ValuesController(IEasyCachingProvider provider)
    {
        this._provider = provider;
    }

    // GET api/values
    [HttpGet]
    public IActionResult Get()
    {
        try
        {
            //Set
            _provider.Set<string>("demo", "Hello", TimeSpan.FromMinutes(1));

            //Get
            var res = _provider.Get<string>("demo");

            return Ok(res);
        }
        catch(Exception ex)
        {
            return StatusCode(500, ex.Message);
        }

    }
}