코모 우사르 레디스 엠 우마 소루ço.그물

8690 단어 dotnetcsharptutorial
오라!
이것은 매우 빠른 리듬이다.이것은 트라바르하르 마을에서 온 위대한 예술 작품이다.순수 e C#.그들의 언어와 정보 서비스 시설은 우리에게 새로운 서비스를 제공할 것이다.
그 밖에 우리는 aplica 식입식 의료 설비의 문제를 해결하고 이를 의료 체계에 포함시키기 위해 계속 노력할 것이다.Um dos primeiros의 문제는 정확한 해석기가 uma forma de uso de cache Utizando Redis em uma API를 구현했다는 점입니다.
네트워크, 모바일 기기 등의 응용은 임시적인 데이터 서비스에 로컬 설비를 제공하고 경제 문제를 해결하는 데 도움을 준다.이곳은 자주 찾는 곳이다.
크리오 움코디고 파라 에세 아티고 파드 포드 세인콘라도nesse repositório do GitHub.Nele,criei consumi aPokéApi,uma API com dados de quase todos todos pokémons lançados atéhoje.Segui a poltica de fair use dela que diz "로컬 캐시 리소스를 언제든지 요청"(armazene recursos em cache quando os consultar)는 salvei todas를 리듬에 제한된 요구로 한다.
이것은 형식이 다양한 항목이다
ExemploRedis/
├─ Controllers/
│  ├─ PokemonController.cs
├─ Extensions/
│  ├─ DistributedCacheExtension.cs
├─ Services/
│  ├─ Interfaces/
│  │  ├─ ICacheService.cs
│  │  ├─ IPokemonService.cs
│  ├─ PokemonCacheService.cs
│  ├─ PokemonService.cs
├─ Pokemon.cs
아쿠보 포켓몬스터.cs contém as informaçes de Pokémons da API.간단한 예: Adicionei apenas의 3가지 측면:
public class Pokemon
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Weight { get; set; }
}
안녕히 계세요, 마이크로소프트.확장캐시Redis NuGet para trabalhar com o Redis.Com ele,criei a extensão Extensions/distributed cacheextension.cs para adicionar o serviçoáAPI:
public static IServiceCollection AddDistributedCache(
    this IServiceCollection services,
    IConfiguration configuration)
{
    services.AddDistributedRedisCache(options =>
    {
        options.Configuration = 
            configuration.GetConnectionString("Redis");
        options.InstanceName = 
            configuration["Redis:InstanceName"];
    });
    return services;
}
자동 해석을 설정하는 옵션으로: 계기 이름 문자열.
Adicionei essa extens no Arquivo 초창기 회사.cs, método 설정 서비스가 필요 없고 código의 일부분만 필요합니다.
services.AddDistributedCache(Configuration);
버스와 교통 데이터, 그리고 전자 설비를 포함한 보조 설비에 서비스를 제공한다.
public interface ICacheService<T>
{
    Task<T> Get(int id);
    Task Set(T content);
}
O código acimaéda interface do serviceçO.Decidi usar um tipo genérico nela para que ela seja reaprovideada para qualquer objeto que eu precisar.O는 다음과 같은 도구를 제공합니다.
public class PokemonCacheService : ICacheService<Pokemon>
{
    private readonly IDistributedCache _distributedCache;
    private readonly DistributedCacheEntryOptions _options;
    private const string Prefix = "pokemon_";

    public PokemonCacheService(IDistributedCache distributedCache)
    {
        _distributedCache = distributedCache;
        _options = new DistributedCacheEntryOptions
        {
            AbsoluteExpirationRelativeToNow = 
                TimeSpan.FromSeconds(120),
            SlidingExpiration = TimeSpan.FromSeconds(60)
        };
    }

    public async Task<Pokemon> Get(int id)
    {
        var key = Prefix + id;
        var cache = await _distributedCache.GetStringAsync(key);
        if (cache is null)
        {
            return null;
        }
        var pokemon = JsonConvert.DeserializeObject<Pokemon> 
            (cache);
        return pokemon;
    }

    public async Task Set(Pokemon content)
    {
        var key = Prefix + content.Id;
        var pokemonString = JsonConvert.SerializeObject(content);
        await _distributedCache.SetStringAsync(key, pokemonString, 
            _options);
    }
}
파산도 폴 토도스 폰토스:
private readonly IDistributedCache _distributedCache;
private readonly DistributedCacheEntryOptions _options;
private const string Prefix = "pokemon_";

public PokemonCacheService(IDistributedCache distributedCache)
{
    _distributedCache = distributedCache;
    _options = new DistributedCacheEntryOptions
    {
        AbsoluteExpirationRelativeToNow =   
            TimeSpan.FromSeconds(120),
        SlidingExpiration = TimeSpan.FromSeconds(60)
    };
}
primeiroscampos사에서 분포식 캐시 eã u 옵션은 관계형의 직접적인 설정이다.IDistributedCacheéa interface que utilizei para acessar o Redis através de injeão de dependencia.JáDistributed Cacheentry Optionséa classe Responseável por configurar op como Absolute Expiration Relative to Now e Slideng Expiration, 총 리듬과 총 리듬을 참고하여 각각 컨설팅 서비스를 제공합니다.접두사는 포켓몬스의 접두사를 가리킨다.Utilizo ele+o id do pokemon para armazenar os dados com chavesúnicas——o que facilita a consulta poster.
Sobre o método Get:
public async Task<Pokemon> Get(int id)
{
    var key = Prefix + id;
    var cache = await _distributedCache.GetStringAsync(key);
    if (cache is null)
    {
        return null;
    }
    var pokemon = JsonConvert.DeserializeObject<Pokemon>(cache);
    return pokemon;
}
Nele, crio a chave como prefixo+id do pokemon e busco o o dado no cache utility do o método GetString Async(key) da 인터페이스 IDistributed Cache.nulo에 대해 이것은 간단한 표현, 즉 Returno nulo(ou poderia notificiar um erro ou lan çar uma exc ço)이다.Caso o contrário, pokemon e Retrono o valor에 사용되는 문자열을 반서열화합니다.
Sobre o método 키트:
public async Task Set(Pokemon content)
{
    var key = Prefix + content.Id;
    var pokemonString = JsonConvert.SerializeObject(content);
    await _distributedCache.SetStringAsync(key, pokemonString, 
        _options);
}
Nele,crio a chave da mesma forma,com o prefixo+o id do pokemon informado,então serializo o objeto em string e armazeno no Redis utility o método SetStringAsync()da interface IDistributedCache.이것은 새로운 무기장비(고문장비)로 무기장비(구조가 없는 무기장비, 구조가 없는 정보장비)이다.
쾌취 서비스 회사, Poké Api 컨설팅 회사.커넥터:
public interface IPokemonService
{
    Task<Pokemon> GetPokemon(int id);
}
E o serviço que a implementa:
public class PokemonService : IPokemonService
{
    private readonly HttpClient _httpClient;

    public PokemonService(HttpClient httpClient)
    {
        _httpClient = httpClient;
        _httpClient.BaseAddress = new 
            Uri("https://pokeapi.co/api/v2/");
    }

    public async Task<Pokemon> GetPokemon(int id)
    {
        var response = await 
            _httpClient.GetAsync($"pokemon/{id}");
        var content = await response.Content.ReadAsStringAsync();
        var pokemon = JsonConvert.DeserializeObject<Pokemon> 
            (content);
        return pokemon;
    }
}
O serviçOébem simples:Posui um campo HttpClient que foi injetado e O método GetPokemon(int id),que faz a chamadaèAPI e returna um pokemon.Adicionei o Http 고객 ao 스타트업 utilizando a seguinte linhade código no arquivo 스타트업.대테러 엘리트:
    services.AddHttpClient<IPokemonService, PokemonService>();
중요한 공증인은 고객으로 고객을 위해 서비스를 제공할 수 있다.
Com tudo pronto, criei um 컨트롤러 보조 서비스 벽면:
[ApiController]
[Route("api/[controller]")]
public class PokemonController : ControllerBase
{
    private readonly IPokemonService _pokemonService;
    private readonly ICacheService<Pokemon> _pokemonCacheService;

    public PokemonController(IPokemonService pokemonService, 
        ICacheService<Pokemon> pokemonCacheService)
    {
        _pokemonService = pokemonService;
        _pokemonCacheService = pokemonCacheService;
    }

    [HttpGet("{id}")]
    public async Task<IActionResult> Get(int id)
    {
        Pokemon pokemon = await _pokemonCacheService.Get(id);
        if (pokemon is null)
        {
            pokemon = await _pokemonService.GetPokemon(id);
            await _pokemonCacheService.Set(pokemon);
        }
        return Ok(pokemon);
    }
}
Nele,injeto tanto o PokemonService quanto CacheService pelo construtor.그것은 포켓몬스터의 화신이다. 포켓몬스터의 통제자는 아마도 하나의 임무일 것이다.이것은 포켓몬에 관한 이야기입니다. 포켓몬에 관한 이야기입니다.카소 노하자(Caso n chaja), 엘 차마(ele chama o service que consultaráa API e ent and o Devove o pokémon).
Eesseéo fim do 자습서.렘브레 베사르 아우레푸히토 리우노GitHub 카소 퀴라 에스투다-로 멜호(caso queira estudálo melhor).카소 쿠라, 아쿠보 나루터의 일꾼입니다.yml para facilitar o uso do Redis.

좋은 웹페이지 즐겨찾기