0

データベースの操作にiBatisを使用しています。最近、キャッシュを構成することにより、一部の静的データフェッチのパフォーマンスを改善しようとしています。チャッシュは正しく構成され、機能しましたが、問題は、データに挿入/更新/削除が発生するたびにキャッシュデータをフラッシュすることです。カテゴリテーブルの構成は次のとおりです。

<cacheModel  type="LRU" id="categoryCache"  readOnly="true" serialize="false">
    <flushOnExecute statement="insertCategory"/>
    <flushOnExecute statement="updateCategory"/>
    <flushOnExecute statement="deleteCategory"/>
    <property name="size" value="1000"/>
</cacheModel>

<insert id="insertCategory"
    parameterClass="com.uniplas.entity.master.beans.CategoryVO">
    insert into categories (code, description)
    values(#code:VARCHAR#,#description:VARCHAR#)
</insert>

<update id="updateCategory"
    parameterClass="com.uniplas.entity.master.beans.CategoryVO">
    update categories set description=#description:VARCHAR# where code=#code:VARCHAR#
</update>

<delete id="deleteCategory"
    parameterClass="com.uniplas.entity.master.beans.CategoryVO">
    delete from categories where code=#code:VARCHAR#
</delete>

<select id="selectCategory" resultMap="categoryResult"
    parameterClass="java.util.Map" cacheModel="categoryCache">
    select * from categories where 1=1
    <dynamic>
        <isNotEmpty property="categoryVO.code">
            and code like #categoryVO.code:VARCHAR#
        </isNotEmpty>
        <isNotEmpty property="categoryVO.description">
            and description like
            #categoryVO.description:VARCHAR#
        </isNotEmpty>
        <isNotEmpty property="orderBy">
            order by $orderBy$
        </isNotEmpty>

    </dynamic>
</select>

ここで問題となるのは、insertCategory / updateCategory / deleteCategoryステートメントのいずれかが実行されても、キャッシュがフラッシュされないことです。挿入/更新/削除の前に選択されたデータを保持します!

どこが悪いのか教えてください。

4

1 に答える 1

0

キャッシュを readOnly="false" に設定してみてください -- ドキュメントから:

このフレームワークは、読み取り専用キャッシュと読み取り/書き込みキャッシュの両方をサポートしています。読み取り専用キャッシュはすべてのユーザー間で共有されるため、パフォーマンスが大幅に向上します。ただし、読み取り専用キャッシュから読み取られたオブジェクトは変更しないでください。代わりに、新しいオブジェクトをデータベース (または読み取り/書き込みキャッシュ) から読み取って更新する必要があります。一方、オブジェクトを取得および変更に使用する意図がある場合は、読み取り/書き込みキャッシュが推奨されます (つまり、必須です)。読み取り専用キャッシュを使用するには、キャッシュ モデル要素で readOnly="true" を設定します。読み取り/書き込みキャッシュを使用するには、readOnly="false" を設定します。デフォルトは読み取り専用 (true) です。

于 2009-11-19T22:25:09.370 に答える