0

私はデータをキャッシュするという概念に慣れていないので、データベースから MVC Web アプリケーションにデータをキャッシュするために構築している戦略で見落としている問題があるかどうかを尋ねたいと思いました。基本的に、キャッシュを見ているデータは実質的に読み取り専用であり、更新される頻度は非常に低いことを強調したいと思います (アプリが更新されるコードのアップグレードと一致します)。

私が調査できたことから、キャッシュを構築および維持するためのヘルパーとして機能する静的クラスを使用することを計画していました。以下のコードは、さまざまなベースボール カードのコンディション グレード (ミント、ニアミントなど) を含むデータベース テーブルからキャッシュを作成する方法を示しています。

静的 CacheHelper クラス:

public static class CacheHelpers
{
    private static HashSet<baseballcardcondition> _CardConditionsCache = null;
    public static HashSet<baseballcardcondition> CardConditionsCache
    {
        get
        {
            if (_CardConditionsCache == null)
            {
                _CardConditionsCache = (HttpContext.Current.Cache["CardConditionsCache"] as HashSet<baseballcardconditions>);
                if (_CardConditionsCache == null)
                {
                    mydbEntities db = new mydbEntities();
                    _CardConditionsCache = new HashSet<baseballcardconditions>(db.baseballcardconditions);
                    HttpContext.Current.Cache.Insert("CardConditionsCache", _CardConditionsCache);
                }
            }
            return _CardConditionsCache;
        }
        set
        {
            HttpContext.Current.Cache.Insert("CardConditionsCache", _CardConditionsCache);
        }
    }//public static HashSet<baseballcardconditions> CardConditionsCache
}//public static class CacheHelpers

後で、このデータを使用して jqGrid グリッド (表形式のデータを表示するための jQuery JavaScript プラグイン) 用にフォーマットされた文字列を作成し、次の方法でアクセスします。

        //cardConditionSelectListHelperString
        string tempString = "";

        foreach (var keyPair in CacheHelpers.CardConditionsCache)
        {
            tempString += keyPair.IdBaseballCardCondition + ":" + keyPair.Condition + ";";
        }

これは、MVC Web アプリケーションのキャッシュを管理するための堅固で堅牢なスレッド セーフな方法のように見えますか? おそらくキャッシュされた他のハッシュセットを持つように CacheHelpers クラスを拡張するので、この読み取り専用の基本的に静的なデータのためにデータベースにアクセスする必要はありません。

前もって感謝します。

4

1 に答える 1