1

EnterpriseLibrary cacheManager を使用しています

<cacheManagers>
  <add name="NonExperimentalAppsCache" type="Microsoft.Practices.EnterpriseLibrary.Caching.CacheManager, Microsoft.Practices.EnterpriseLibrary.Caching, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null" expirationPollFrequencyInSeconds="60" maximumElementsInCacheBeforeScavenging="10000" numberToRemoveWhenScavenging="100" backingStoreName="Null Storage" />
</cacheManagers>

実験時間を 1 分にしたい (キャッシュに触れるたびに更新しない絶対値) どうすればよいですか? データをより長く保存できるようになったためです。

キャッシュ経由でリポジトリを使用します

    public static List<string> GetAllNonExperimentalAppsNames()
    {
        List<string> nonExperimentalAppsNames = NonExperimentalAppsCacheManager.Get();

        if (nonExperimentalAppsNames == null)
        {
            //was not found in the cache
            nonExperimentalAppsNames = GetAllNonExperimentalAppsNamesFromDb();

            if (nonExperimentalAppsNames != null)
            {
                NonExperimentalAppsCacheManager.Set(nonExperimentalAppsNames);
            }
            else
            {
                mApplicationLogger.Info(string.Format("GetAllNonExperimentalAppsNames:: nonExperimentalAppsNames list is null"));
            }
        }
        return nonExperimentalAppsNames;
    }

..

internal static class NonExperimentalAppsCacheManager
{
    private const string NONEXPERIMENTALAPPS = "NonExperimentalApps";

    private static readonly ICacheManager nonExperimentalAppsCache = CacheFactory.GetCacheManager("NonExperimentalAppsCache");

    internal static List<String> Get()
    {
        return nonExperimentalAppsCache[NONEXPERIMENTALAPPS] as List<String>;
    }

    internal static void Set(List<String> settings)
    {
        nonExperimentalAppsCache.Add(NONEXPERIMENTALAPPS, settings);
    }
}
4

1 に答える 1

2

アイテムをキャッシュに追加するときは、絶対有効期限を指定します。

internal static void Set(List<String> settings)
{
    nonExperimentalAppsCache.Add(NONEXPERIMENTALAPPS, settings, 
        CacheItemPriority.Normal, null, new AbsoluteTime(TimeSpan.FromMinutes(1)));
}

有効期限が切れると、アイテムがキャッシュから削除されます。それをリフレッシュするのはあなた次第です( を使用して行うことができますICacheItemRefreshAction)。アイテムをキャッシュに追加するときに 1 分の有効期限を指定したが、有効期限プールの頻度が 10 分である場合、アイテムにアクセスしようとしない限り、アイテムは 10 分経過するまでキャッシュから削除されません。アイテムが「期限切れ」であるがキャッシュ内にある (バックグラウンド プロセスが実行されていないため) ときに呼び出すGet()と、アイテムはキャッシュから削除され、null が返されます。

内部設計の詳細については、キャッシング アプリケーション ブロックの設計を読むことをお勧めします。

于 2013-01-10T08:11:58.290 に答える