C# 通过EasyCaching在.NET内核中实现Memcache
我使用此链接将提供程序设置为Memcached 1) 我通过Nuget下载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
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”)之后取null你知道这种奇怪的行为是什么吗?如何从缓存值中获取?您使用的是哪个缓存提供程序?我意识到Memcached,在编辑之后,我添加了整个代码。那么您现在是否设置了单独的Memcached服务器?我什么都没做。只需复制教程中的代码。
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);
}
}
}