如何使用easycache设置值而不过期

iovurdzv  于 2021-06-08  发布在  Redis
关注(0)|答案(1)|浏览(548)

我正在应用程序中集成easy缓存。我看到他们已经设置了将缓存添加到expiry的方法,但是这个方法对于expiry time是强制的。有没有办法在不过期的情况下添加/设置缓存?

mqxuamgl

mqxuamgl1#

根据源代码,我发现有一个 ExpirationScanFrequency 属性,该属性将检查缓存的过期时间,如果缓存已超过过期时间,则会将其删除。
源代码如下:

private void StartScanForExpiredItems()
    {
        var utcNow = SystemClock.UtcNow;
        if (TimeSpan.FromSeconds(_options.ExpirationScanFrequency) < utcNow - _lastExpirationScan)
        {
            _lastExpirationScan = utcNow;
            Task.Factory.StartNew(state => ScanForExpiredItems((InMemoryCaching)state), this,
                CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);
        }
    }

    private void ScanForExpiredItems(InMemoryCaching cache)
    {
        var now = SystemClock.UtcNow;
        foreach (var entry in cache._memory.Values.Where(x => x.ExpiresAt < now))
        {
            cache.Remove(entry.Key);
        }
    }

如果希望这些缓存永不过期,可以将此值设置为0,然后它将永远不会检查过期时间。
有关详细信息,请参阅以下代码:
注意:这个设置只适用于内存缓存,redis中没有设置。

//configuration
    services.AddEasyCaching(options => 
    {

         options.UseInMemory(config => 
        {
          config.DBConfig = new InMemoryCachingOptions
            {
                // scan time, default value is 60s
                ExpirationScanFrequency = 0, 
                // total count of cache items, default value is 10000
                SizeLimit = 100 
             };

         }, "m2");

    });

相关问题