asp.net core IDistributedCache

2022/2/11 22:13:26

本文主要是介绍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"));



这篇关于asp.net core IDistributedCache的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程