• asp.net core IDistributedCache


    使用redis包

    install-package Microsoft.Extensions.Caching.Redis

    配置redis-server

    builder.Services.AddDistributedRedisCache(options =>
    {
        options.InstanceName = "book_";  // 用来区别其他应用
        options.Configuration = "172.30.171.59:6379";   // redis-server
    });
    

    使用IDistributedCache

            private IDistributedCache MemoryCache { get; init; }
            private ILogger<CacheTestController> Logger { get; set; }
    
            public CacheTestController(IDistributedCache memoryCache, ILogger<CacheTestController> logger)
            {
                MemoryCache = memoryCache;
                Logger = logger;
            }
    
            [HttpGet("book")]
            public async Task<ActionResult<Book?>> GetBookById(int id)
            {
                Logger.LogInformation($"enter GetBookById, id={id}");
    
                string key = $"book_{id}";
                Book? book = null;
    
                if (await MemoryCache.GetAsync(key) == null)
                {
                    Logger.LogInformation($"not found in cache, search in BookDbContext.");
                    book = await new BookDbContext().GetBookByIdAsync(id);
    
                    string val = JsonConvert.SerializeObject(book);
                    DistributedCacheEntryOptions options = new DistributedCacheEntryOptions()
                    {
                        // set cache entry expiration timeout
                        SlidingExpiration = TimeSpan.FromSeconds(20),
                        AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(Random.Shared.Next(50, 100)),
                    };
    
                    await MemoryCache.SetStringAsync(key, val, options);
                }
                else
                {
                    Logger.LogInformation($"found book in cache.");
                    string val = await MemoryCache.GetStringAsync(key);
    
                    book = JsonConvert.DeserializeObject<Book>(val);
                }
    
                Logger.LogInformation($"GetAsync returns {book}");
    
                if (book == null)
                    return NotFound($"cannot find bood with id:{id}");
    
                return book;
            }
    

    注意点

    虽然使用是SetStringAsync,但是在redis中保存的是Hash类型,不是string类型

    试了一下SetAsync,保存的也是Hash类型。

    await MemoryCache.SetAsync($"bk_{id}", Encoding.ASCII.GetBytes("hello"));
    

  • 相关阅读:
    面向对象设计与实用的思考(主动对象与被动对象)
    改进弧长法 判断点是否在多边形内 c#代码
    PaintCode begin
    kiwivm putty lnmp
    初心已变,我也不是当时的我
    spfa
    tree dp
    开心就好之修行ing
    MIME 参考手册
    TypeScript学习和参考手册
  • 原文地址:https://www.cnblogs.com/mryux/p/15884670.html
Copyright © 2020-2023  润新知