.net core 内存缓存

安装包

Microsoft.Extensions.Caching.Memory

在setup中注册服务

public void ConfigureServices (IServiceCollection services) 
{
    services.AddMemoryCache ();
    ...
}

使用

public class ValuesController : ControllerBase {
    private IMemoryCache _cache;

    public ValuesController (IMemoryCache memoryCache) {
        _cache = memoryCache;
	}

    // GET api/values
    [HttpGet]
    public ActionResult<string> Get () {
        // 从缓存中获取键为 key1 的项,如果没有或过期,则调用第二个参数Fun生成
        return _cache.GetOrCreate<string> ("key1", cacheEntity => {
            // 设置过期时间,过期后会重新调用该函数生成值

            // 设置过期时间
            // 如果5秒内没有访问该值,则过期
            // 否则,过期时间刷新为访问的时间 +5 秒
            cacheEntity.SlidingExpiration = TimeSpan.FromSeconds (5);

            // 设置绝对过期时间
            // 过期时间为15秒后,无论这15秒内是否有访问都会过期
            cacheEntity.AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds (15);

            // 设置该项优先级
            // NeverRemove 为不会从缓存中移除,除非过期
            // 优先级越低,内存不足时,将会移除该项
            cacheEntity.SetPriority (CacheItemPriority.NeverRemove);

            // 注册缓存项从缓存移除时的回调函数
            cacheEntity.RegisterPostEvictionCallback (
                (object key, object value, EvictionReason reason, object state) => { });

            return DateTime.Now.ToString ();
        });
	}

    [HttpGet]
    public ActionResult Remove () {
        // 从缓存中移除键为key1的缓存项
        _cache.Remove ("key1");

        return Ok ();
    }
}

内存缓存与EFCore

EFCore也使用内存缓存,如果我们使用依赖注入注入IMemoryCache ,则注入的可能是EFCore使用的缓存,所以最好的方法是我们重新注入我们的缓存(单例)

public class IEMemoryCache : MemoryCache, IIEMemoryCache
{
    public IEMemoryCache() : base(new MemoryCacheOptions {
        SizeLimit = null
    })
    {
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值