問題タブ [second-level-cache]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
348 参照

hibernate - Hibernate L2 Cache のトランザクション戦略

Hibernate L2 キャッシュ ベンダーが「トランザクション」戦略をサポートしている場合、このキャッシュは、Hibernate 構成で指定されているトランザクション間の同じレベルの分離を保証することを意味しますか?

たとえば、キャッシュが「読み書き」戦略をサポートしている場合、REPEATABLE_READ 分離レベル (場合によっては READ_COMMITTED レベルのみ) が保証されます。

0 投票する
1 に答える
4715 参照

hibernate - Hibernate の第 2 レベルのキャッシュがコミットされたエンティティをキャッシュしない

他のアプリケーションが DB を変更していないことがわかっている場合、Hibernate の第 2 レベル キャッシュ (EHCache を使用しています) で、アプリケーションが DB にコミットされたエンティティをキャッシュできるようにすることができるかどうか疑問に思っています。

私の考えでは、レコード A を更新すると、レコード A の値がわかり、それをキャッシュできるはずです。Terracotta のような JVM クラスタリング システムは、Java 同期ロックを使用する JVM ヒープ メモリに関して、このタイプの動作をサポートします。

Hibernate での EHCache ロック モードの構成

0 投票する
4 に答える
6685 参照

hibernate - JBoss5のHibernateの第2レベルのキャッシュとしてのJBossCache

これが私の設定です:Hibernate 3.3.1.GA、JBoss 5.1.0.GA、JBossCache3.2.0.GA。

ここで説明されているようにHibernate構成を行っています: http ://www.jboss.org/community/wiki/ClusteredJPAHibernateSecondLevelCachinginJBossAS5

しかし、指定されたプロパティが無効であるというエラーが発生します。

したがって、「cache.region.factory_class」プロパティは使用できず、「cacheRegionFactoryClass」(例外で表示されます)のみを使用できます。

cache.region。*のような他のプロパティを使用できないため、休止状態の2番目のレベルのキャッシュを構成できません。

誰かがJBoss5.1でJBossCache3.2を設定する方法のリンクを教えてもらえますか?特にJndiSharedJBossCacheRegionFactoryとJndiMultiplexedJBossCacheRegionFactoryに興味があります。

0 投票する
3 に答える
7579 参照

java - Hibernate: カスケード削除アイテム中にコレクションの第 2 レベルのキャッシュを消去する

カスケード削除の対象となるアイテムのコレクションに対して、Hibernate が第 2 レベルのキャッシュを更新しないという問題があります。

詳細

Child オブジェクトの Parent.myChildren コレクションを持つオブジェクト Parent があるとします。これで、Humans.myAllHumans コレクションを持つオブジェクト Humans もあり、すべての親オブジェクトと子オブジェクトはそのコレクション内にあります。
これで、session.delete(parent)が実行され、すべての子がデータベースからカスケード削除されますが、Humans.myAllHumans コレクションのキャッシュは更新されません! カスケード削除されたオブジェクトがデータベースにあると想定し、後でコレクションを反復しようとすると、次の例外が発生します:
org.hibernate.ObjectNotFoundException: 指定された識別子を持つ行が存在しません: [foo.Child#751]

試みたアプローチ

1)私はSessionFactory.evictCollection()アプローチを試しましたが、トランザクションセーフではなく、第 2 レベルのキャッシュからデータをハード削除することを理解しているので、それは望ましくありません。

2) myAllHumans コレクションから各オブジェクトを手動で (プログラムで) 削除することもできます。この場合、休止状態は第 2 レベルのキャッシュを更新します。このアプローチは、カスケード削除機能が役に立たなくなるだけなので、避けたいと思います。

期待される

コレクションのキャッシュを自動的に更新できるように、休止状態を賢くしたいと思います。出来ますか?
私は現在 EhCache を使用しています。別のキャッシュ実装を使用するか、EhCache を構成すると役立つと思いますか?

0 投票する
1 に答える
1363 参照

wcf - Hibernate クエリ キャッシュと WCF

クエリの 1 つでクエリ キャッシュを有効にしました。テストまたはコンソール アプリケーションを実行すると、正常に動作します (クエリ結果はクエリ キャッシュから取得され、エンティティは第 2 レベル キャッシュから取得されます)。ただし、WCF サービスを介して同じクエリを実行すると、キャッシュがヒットすることはありません。

どちらの場合もログを確認しましたが、キャッシュ ミスが発生するまでは実質的に同じです。

キャッシュが置かれたことを示すNHのログは次のとおりです。

キャッシュミスを示すNHのログは次のとおりです。

WCF サービスにない場合のキャッシュ ヒットを示す NH のログは次のとおりです。

クエリを実行するために使用しているコードは次のとおりです。

キャッシュがヒットしないのはなぜですか?

0 投票する
6 に答える
22563 参照

database - 別のプロセスがデータベースを変更するときの Hibernate 2 次キャッシュの無効化

Hibernate の第 2 レベルのキャッシュを使用してデータベース ヒットを回避するアプリケーションがあります。

MySQL 管理者などの外部プロセスが直接接続してデータベースを変更 (更新/挿入/削除) したときに、Java アプリケーションの Hibernate 2nd レベル キャッシュを無効にする簡単な方法があるかどうか疑問に思っていました。

2 番目のレベルのキャッシュの実装としてEHCacheを使用しています。

@Cache(usage = CacheConcurrencyStrategy.READ_WRITE) と @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) を組み合わせて使用​​し、各エンティティのタイムスタンプを使用してオプティミスティック同時実行制御を有効にしません。

SessionFactory には、第 2 レベルのキャッシュを管理するためのメソッドが含まれています。 - キャッシュの管理

しかし、個々のエンティティ クラスに @Cache でアノテーションを付けているため、それを「確実に」(たとえば、手動の手順なしで) リストに追加する中心的な場所がありません。

Hibernate の第 2 レベルのキャッシュがエンティティを照会しない限り、DB でエンティティが変更されたことを知る本当の方法はありません (これはキャッシュがあなたを保護しているものです)。したがって、解決策として、単純にメソッドを呼び出して、第 2 レベルのキャッシュにすべてを強制的に追い出すことができます (これも、ロックと同時実行制御が不足しているため、進行中のトランザクションが古いデータを「読み取ったり更新したりするリスクがあるためです)」。

0 投票する
1 に答える
1650 参照

nhibernate - NHibernate名前付きクエリと第2レベルのキャッシュ

私は次のマッピングを持っています

およびhibernate.cfg.xmlの次の構成

マップされたコレクションを呼び出すSetCacheable(true)を使用して名前付きクエリを実行すると、2次キャッシュに到達しません。理由はありますか?

より一般的には、名前付きクエリの結果セットを第2レベルのキャッシュに入れる方法はありますか?

ありがとう!

0 投票する
1 に答える
13478 参照

nhibernate - NHibernateの第2レベルのキャッシュからオブジェクトを削除する

私は自分のアプリの1つでNHibernateの第2レベルのキャッシュを使用することを考え始めました。私はおそらくNHibernate.Caches.SysCache.SysCacheProviderASP.netキャッシュに依存するを使用します。

キャッシュを有効にすることは問題ではありませんでしたが、キャッシュを管理する方法、たとえば、キャッシュから特定のエンティティをプログラムで削除する方法などについて疑問に思っています。

私のアプリケーションはある種の画像データベースです。ユーザーはバックエンドを介して画像をアップロードし、アクセスしてフロントエンドで画像を表示できます/ImageDb/Show?userId=someUserId

データはあまり頻繁に変更されません。また、変更された場合、ユーザーは、このユーザーのキャッシュされたオブジェクトをキャッシュから削除するバックエンドの「キャッシュをクリア」という名前のボタンを気にする必要はありません。

nhibernatesの第2レベルのキャッシュからすべてのキャッシュされたオブジェクトを削除できるソリューションをオンラインで見つけました。しかし、それは私には少しブルートフォースです... 1人のユーザーが自分のデータのキャッシュをクリアしようとしたという理由だけで、数十人のユーザーのキャッシュ全体をクリアしたくありません。

だから私が基本的にやりたかったのは、C#のnhibernatesの第2レベルのキャッシュからキャッシュされたdbオブジェクトを選択的に削除することです。

これは可能ですか?キャッシュプロバイダーにもよると思います。これがASP.netキャッシュプロバイダーで実行できない場合、私は他の組み込み/オープンソースの提案を受け入れます。

0 投票する
4 に答える
34735 参照

java - 休止キャッシュ戦略

どちらを使用するかをどのように決定CacheConcurrencyStrategyしますか?

  • NonstrictReadWriteCache
  • ReadOnlyCache
  • ReadWriteCache
  • TransactionalCache.

https://www.hibernate.org/hib_docs/v3/api/org/hibernate/cache/CacheConcurrencyStrategy.htmlを読みましたが、十分に詳しく説明していません。

0 投票する
2 に答える
4691 参照

java - jpaエンティティ用にehcache.xmlを構成するか、注釈を使用しますか?

次のようなステートメントを定義するのではなく、ehcacheを使用する場合

使用しているキャッシュプロバイダーに関係なく、エンティティ内で直接定義できますか?

参照: http://wiki.eclipse.org/EclipseLink/Examples/JPA/Caching (EclipseLink に対してのみ表示され、ehcache に対しては表示されませんでした)