5

ASP.NET/C#/SQL Server 2012で、いくつかのストアドプロシージャクエリの結果をキャッシュする必要があるWebサイトを実行しています。結果には絶対的な有効期限があります。これを行うにはどのようなオプションがありますか?

できればcommand.ExpirationDateTime=DateTime.Now.AddMinutes(10)を設定するのが良いでしょうが、私が知る限り、そのようなことは不可能です。

編集:データはAPIから返されるため、ページやユーザーコントロールを使用してキャッシュすることはできません。

4

4 に答える 4

1

エンタープライズライブラリキャッシングアプリケーションブロックをご覧ください。これはあなたが探している正確な機能を持っています

キャッシングアプリケーションブロック

    cache.Add(listid.ToString(), list, CacheItemPriority.Normal, null, 
new SlidingTime(TimeSpan.FromMinutes(60)));
于 2012-11-20T13:55:45.807 に答える
1

実際にキャッシングを実行できる場所の制限についてはわかりませんが、アクセスできると思いますHttpRuntime.Cacheか?その場合は、ブログ投稿(Caching Services-The Lazy Way)にサービス応答をキャッシュするための一連のユーティリティを作成しました。

このユーティリティの基本は、次のことを実行できることです。

   string cacheKey = GenerateCacheKey(myParam); //most likely a derivative of myParam

   if (Cache.IsInCache<MyResultType>(cacheKey))
   {
      return Cache.GetFromCache<MyResultType>(cacheKey);
   }

   var result = GetMyRequestedResult(myParam);
   if (result != null) //or whatever makes sense
   {
      Cache.InsertIntoCacheAbsoluteExpiration(cacheKey, result, DateTime.Now.AddMinutes(0));
   }

   return result;

間にサービスがある場合、投稿にはそれらのサービスと対話/キャッシュするためのかわいいクラスが表示されます。

于 2012-11-20T15:06:27.093 に答える
0

コマンドテキストをパラメーターの名前と値とマージして、SqlCommandからハッシュを作成することになりました。HttpContext.Current.Cacheオブジェクトにデータを出し入れするときに、キャッシュキーとして使用したハッシュ。正常に動作します。おそらく超高速ではありませんが、一部のクエリはやや遅いので、すべて問題ありません。

于 2012-11-21T08:02:59.300 に答える
0

Webアプリケーションだけでなく、.NetFramework4以降のSystem.Runtime.Caching.ObjectCacheを使用することもできます。次に例を示します。

List<EmailData> result = null;

ObjectCache cache = MemoryCache.Default;
var key = string.Concat(title, ":", language);
var item = cache.GetCacheItem(key);

if (item != null)
  return item.Value as List<EmailData>;

using (var connection = _connectionFactory.OpenConnection())
{
  result = connection.Query<EmailData>(sql, new { title, language }).ToList();
}

var cachingPolicy = new CacheItemPolicy
{
  AbsoluteExpiration = DateTimeOffset.UtcNow.AddMinutes(_cacheExpirationIntervalInMinutes)
};

cache.Set(new CacheItem(key, result), cachingPolicy);

return result;

詳細については、 https: //msdn.microsoft.com/en-us/library/system.runtime.caching.objectcache(v = vs.110).aspxを参照してください。

于 2016-11-04T13:44:19.553 に答える