Я использую эту ссылку, чтобы сделать провайдера для Memcached DefaultMemcachedCachingProvider.
1) Я загружаю EasyCaching.Memcached через Nuget
2) добавить конфиг в startup.cs класс
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(); в Configure
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);
}
}
}
в exception ex я принимаю ошибку
"Connection failed because the destination computer rejected the connection request 127.0.0.1:11111"
И я не знаю, как это исправлено, что я сделал не так? Я сделал это по учебнику
РЕДАКТИРОВАТЬ
стартовый класс
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
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);
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseEasyCaching();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseMvc();
}
Мой контроллер
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);
}
}
}
Я ничего не настраивал. В учебнике это не нужно.
В этом руководстве показано, как «обращаться с данными ваших серверов memcached». Предполагается, что у вас уже есть сервер Memcached.
и если я использую Redis, я должен создать сервер? Думаю сохраняет динамически в кеш и все работает по одной строчке. И мне немного сложно понять, что делать в вашей ссылке, потому что это не похоже на учебник





Исключением является то, что он пытается подключиться к серверу Memcached на вашем локальном компьютере через порт 11111 и не может его найти.
Библиотека EasyCaching просто помогает вам подключиться к вашему кешу. Различные поставщики, которые он реализует, помогают вам подключаться к любой базе данных кэширования, которая у вас есть. В случае DefaultMemcachedCachingProvider предполагается, что у вас уже есть настройка сервера Memcached.
Точно так же DefaultRedisCachingProvider предполагает, что у вас уже есть настройка сервера Редис.
Если у вас нет настройки внешнего сервера кэширования, вы можете посмотреть Кэширование в памяти, который сохранит ваш кеш в памяти вашего приложения. Это просто, но оно также стирается при перезапуске вашего приложения (что может вас устраивать, а может и нет).
Или вы можете взглянуть на Кэширование SQLite, который может хранить кеш в файле SQLite, который является просто файлом .db в вашей файловой системе. Внешний кэширующий сервер не требуется.
еще 1 вопрос я добавляю код после ПРИМЕЧАНИЕ и проблема в том что я беру ноль после _provider.Get<string>("demo"); знаете что за странное поведение? Как получить значение из кеша?
Какой поставщик кеша вы используете?
Я понимаю Memcached, после Редактировать я добавляю весь свой код
Итак, вы настроили отдельный сервер Memcached сейчас?
Я ничего не делал. Просто скопируйте код из учебника.
Тогда это не сработает. DefaultMemcachedCachingProvider только помогает вам подключиться к серверу Memcached. Если у вас нет сервера Memcached, вам нужно либо настроить его, либо использовать другого провайдера, как я описал в своем ответе.
Как это настроить, потому что я должен понять, как это сделать? интересно, почему это создает учебник без этого основного материала. Я не понимаю, зачем мне использовать сервер, если я хочу сохранить данные в кеше.
Потому что это не то, для чего этот учебник. Этот учебник написан, чтобы помочь вам использовать EasyCaching для подключения к серверу Memcached, который у вас уже есть.
Знаете ли вы руководство о том, как подключиться к серверу memcached? Я не понимаю, что делать с вашей ссылкой?
ссылку вы далиявляется руководство о том, как соединять на сервер Memcached. Чего вам не хватает, так это настоящего сервера Memcached. Если вы хотите настроить его, посмотрите на Memcached-документация
Ваш сервер Memcached работает на вашем локальном компьютере? Если да, то какой порт настроен для прослушивания? Это исключение сообщает вам, что оно не прослушивает порт
11111.