のyii2キャッシュコンポーネント三番目のパラメータの依存関係$依存性の役割について

次のように使用方法は以下のとおりです。

$ cache->セット($キー、$結果、Configsを::インスタンス() - > cacheDuration、新しいTagDependency([ 
'タグ' =>自己:: CACHE_TAG、
]));

キャッシュでの集合演算では、このパラメータは次のようになります。

保存、キャッシュに値として算出し、その後の$ this - >のsetValue($キー、$値、$時間); $値=シリアライズ([$値、$依存])です。

最も重要なのは、この前に、それ以下となります。$ dependency-> evaluateDependency($この)。

この操作は、$依存関係オブジェクトを変更するためにつながります。これにより、$キーに対応する変更値を発生します。

パブリック関数evaluateDependency($キャッシュ)
    { 
        場合(の$ this - >再利用可能){ 
            $ハッシュ=の$ this - > generateReusableHash(); 
            もし(array_key_exists($ハッシュ、自己:: $ _ reusableData)!){ 
                自己:: $ _ reusableData [$ハッシュ] =の$ this - > generateDependencyData($キャッシュ)。
            } 
            の$ this - >データ=自己:: $ _ reusableData [$ハッシュ]; 
        } {他
            の$ this - >データ=の$ this - > generateDependencyData($キャッシュ)。
        } 
    }

通常$この再利用は、デフォルトである、偽です。

の$ this - >データ=の$ this - > generateDependencyDataを($キャッシュ)の実行、オブジェクトの変更には、結果を変更された属性データ。

次のようにここでは、TagDependencyを使用し、コードは次のとおりです。

保護機能generateDependencyData($キャッシュ)
    { 
        $タイムスタンプ=の$ this - > getTimestamps($キャッシュ、(アレイ)の$ this - >タグ)。

        $ newKeys = []; 
        foreachの($キー=> $タイムスタンプとして$タイムスタンプ){ 
            (偽=== $タイムスタンプ)であれば{ 
                $ newKeys [] = $キー。
            } 
        } 
        もし(!空($ newKeys)){ 
            $タイムスタンプ= array_merge($タイムスタンプ、静的:: touchKeys($キャッシュ、$ newKeys)); 
        } 

        $タイムスタンプを返します。
    }

タイムスタンプは、すべての$のタイムスタンプが偽で取得する最初の時間のために得られます。

主に確認してください。

静的:: touchKeys($キャッシュ、$ newKeys)

コードは以下の通りであります:

保護された静的関数touchKeys($キャッシュ、$キー)
    { 
        $アイテム= []; 
        $時間=のmicrotime(); 
        {foreachのは、($キーとして$キー)
            $商品[$キー] = $時間。
        } 
        $ cache->マルチセット($アイテム); 
        $アイテムを返します。
    }

ミリ秒のタイムスタンプを付与するキー、およびバルクセットのキャッシュを得ました。そして、:

保護された関数getTimestamps($キャッシュ、$タグ)
    { 
        (空($タグ))であれば{ 
            []を返します。
        } 

        $キー= []; 
        foreachの($タグとして$タグ){ 
            $キー[] = $ cache-> buildKey([__ CLASS__、$タグ])。
        } 

        ($キー)$ cache-> multiGetを返します。
    }

キーに対応する値を得るために。

値がキャッシュまたは有効期限が切れていない場合は、対応する配列の値がfalseになります。

この文を確認するにはfalseを返しますが設定されていない場合は、先に述べました。

総単語、第四キャッシュ・セットのパラメータ、およびタイムスタンプのセットを生成し、データのTagDependencyに、そして$ cache-に割り当て> buildKey([__ CLASS__、$タグ])形成されたキーは、キーで、時間キャッシュに格納された値のためのスタンプ。変化を検出するために、このタイムスタンプを使用してください。

そしてTagDependency ::無効(Configsに::キャッシュ()、自己:: CACHE_TAG)は、時間をリセットするために使用され、キャッシュがリフレッシュ値である$ cache-> buildKey([__ CLASS__、$タグ])キーとして。




おすすめ

転載: www.cnblogs.com/jiangtian/p/10991387.html