2017-01-17 3 views
1

私はKentico 9を使用しており、キャッシングをテストしようとしています。新しい値が入力された場合、既存のキャッシュを置き換える方法について質問したいと思います。 Kentico9キャッシングについてのお問い合わせ

は最近、このコードをキャッシュしようとしていた。

CacheHelper.Cache(cs => getCachingValue(cs, cacheValue), new CacheSettings(10, "cacheValue")); 

public string getCachingValue(CacheSettings cs, string result) { 
    string cacheValue= result;  

    if (cs.Cached) 
    { 
     cs.CacheDependency = CacheHelper.GetCacheDependency("cacheValue"); 
    } 

    return cacheValue; 
} 

答えて

2

セットアップ正しいキャッシュ依存関係に必要なデータをキャッシュします。たとえば、これはすべてのユーザーのキャッシュの依存関係です。

if (cs.Cached) 
     { 
      cs.CacheDependency = CacheHelper.GetCacheDependency("cms.user|all"); 
     } 

これは、ユーザーが更新または作成されるたびにキャッシュを削除します。次回にメソッドを呼び出すと、データベースからデータが取得され、キャッシュの有効期限が切れるか、またはユーザーが追加/更新されるまで、再びキャッシュされます。

キャッシュされたデータの置換/更新には注意する必要はありません。適切なメカニズムが既に存在します。

キャッシュの依存関係はdocumentationを参照してください。

+0

また、この例では、キャッシュする値をgetCachingValueメソッドに渡します。キャッシュに格納するデータは、そのメソッドの内部で(データベースから)取り出す必要があります。 –

2

キャッシュの依存関係は"cacheValue"と呼ばれているため、キャッシュを強制的にクリアするには、その特定のキャッシュキーを「タッチ」する必要があります。

CacheHelper.TouchKey("cacheValue"); 

(あなたも検討する必要があります。あなたが変更(あなたがgetCachingValue方法のstring resultパラメータに提供した値)をキャッシュしている値は、クリアするためにキャッシュを強制的にCacheHelper.TouchKeyメソッドを呼び出す

キャッシュキーの名前を変更して混乱を避ける)

1

キャッシュキーが "cacheValue"の場合、これに対して行われる呼び出しは常に「ヒット」となります。 CacheSettingキーはあなたが言うことができる '一意の識別子'であり、キャッシュの依存関係は自動的にリセットされる方法です。たとえば、あなたが「AddTwoValuesのキャッシュ値を持っている場合は、2つの値を追加機能(実際にこれをキャッシュする必要がありますが、入力が変化し例えばません)

をキャッシュ

そうに言います(INT A、INT B)」最初の呼び出しは、呼び出しの値をキャッシュします

CacheHelper.Cache(cs => AddTwoValuesHelper(cs, a, b), new CacheSettings(10, "cacheValue")); 

のそれがキャッシュして、(あなたは1、それに合格し、2言う) 『3』キーの 『cacheValue』

2番目の呼び出しで3、5を渡すと、キャッシュキーは "cacheValue"なので、それは最初の呼び出しと同じ呼び出し3を返し、さらに3 + 5を追加しようとしません。

私は通常、任意のパラメータをキャッシュキーに追加します。

CacheHelper.Cache(cs => AddTwoValuesHelper(cs, a, b), new CacheSettings(10, string.Format("AddTwoValues|{0}|{1}", a, b))); 

iは1と2とそれを呼び出す場合は、この方法で、二回、最初はそれがプロセスやキャッシュ「3」キーの「AddTwoValues | 1 | 2」になる再び呼び出されたときに、キーはそう一致しますキャッシュされた値が返されます。

異なるパラメータで呼び出すと、キャッシュキーが異なります。

意味がありますか?

ヘルパー関数のキャッシュ依存関係のコーストークの他の回答:それは自動的にあなたがcms.usersを行う場合(クリア方法を特定

if (cs.Cached) 
     { 
      cs.CacheDependency = CacheHelper.GetCacheDependency("cms.user|all"); 
     } 

|依存関係など、すべてのユーザーが変更されるたびにこのキャッシュは自動的にクリアされます)

関連する問題