ホームページ  >  に質問  >  本文

java - redis 缓存方案--有没有可用的?

现在的方案是,sql 作为key 查询结果序列化后 存入value 。表如果有数据修改添加删除,flushDB()。
但是整个项目只要有数据变更缓存就没了。
谁还有其他方案?
想知道的就是数据增删改对redis都有操作后再对数据库操作,redis里查询的永远是最新的,当某些原因redis里查不到时查数据库然后保存到reids里。
这种方案有谁实现了吗?

黄舟黄舟2716日前445

全員に返信(6)返信します

  • 高洛峰

    高洛峰2017-04-18 09:15:22

    なぜ SQL をキーとして使用するのか...flushdb を実行するたびに考えが変わる可能性があります。製品を含むテーブルがあり、主キーが id である場合は、キーの詳細: 製品 ID を使用してキャッシュを作成できます。行レコードは値として使用され、データ型はハッシュまたは文字列です。ビジネスで主キーに基づいて特定の製品情報を確認する必要がある場合、最初に Redis にアクセスして詳細のキャッシュがあるかどうかを確認します。主キーにヒットがない場合は、キャッシュを直接取得することがあります。キャッシュを使用する場合は、データベースを確認し、クエリ結果のキャッシュを保存します。また、レコードが変更された場合、キャッシュを直接削除したり、キャッシュを更新したりすることもできます。
    これは非常に単純な例にすぎません。Redis データ型は非常に豊富で、適切に使用すれば非常に快適に使用できます。また、上記の例では、ビジネスに応じて、各キャッシュの有効期間を 1 週間などに設定できます。一般に、ユーザーが古いコンテンツを閲覧することはほとんどないため、有効期限が切れて誰も閲覧しなくなった後は再構築されなくなり、Redis には常にホット データが保持されます。単なる古いデータの塊ではありません。役に立ったらいいねしてください。

    返事
    0
  • ringa_lee

    ringa_lee2017-04-18 09:15:22

    キャッシュの意味は、データベースで頻繁に使用されるデータを Redis に保存するなど、一般的なデータを保存して、毎回データベースにクエリを実行する必要がないようにすることです。

    投稿者が直面した問題は、キャッシュ内のデータとデータベース内のデータの一貫性をどのように保つかということです。
    上記の 表如果有数据修改添加删除,flushDB() と同様、これはお勧めできません。

    キャッシュされたデータの操作は、実際には 読み取り書き込み

    に簡略化されます。

    アプリケーションが Redis にクエリを実行するときに、Redis が見つからない場合は、この時点でデータベースを確認し、見つかったデータを Redis に保存する必要があります。
    データベース内のデータが変更された場合、上記の 数据增删改对redis都有操作后再对数据库操作 は実際には推奨されません。アプリケーションは最初にデータベースを変更し、成功後に Redis を更新する必要があります。最初に redis を更新したが、データベースの更新に失敗した場合はどうすればよいですか? Redis はダーティデータを保存しないのでしょうか?

    さらに、キャッシュ内のデータには有効期限 (有効期限タイムアウト) を設定できます。有効期限が切れた後、(データがまったく変更されていない場合でも) データベースを再度チェックしてデータを更新します。 、少なくともデータベースの負荷を軽減します。

    テーマの目的を見ると、データベース データのバックアップとして Redis を使用する方法がありますが、これは Redis キャッシュを使用する意味ではありません (データベースのマスター/スレーブ バックアップを検討する必要があるかもしれません)。

    ご指摘のソリューションですが、トピックの説明を見ると、ソリューションは必要ありません(データの整合性などを考慮すると、高可用性構成をソリューションと呼ぶと思います)。
    これは実際にはコードのロジックであり、コードの記述方法によって異なります。

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 09:15:22

    Spring には Redis プラグインがあり、小規模なプロジェクトには ehcache および Spring プラグインを使用する方が便利です。

    返事
    0
  • 迷茫

    迷茫2017-04-18 09:15:22

    キャッシュ システムを実装するときは、次の 3 つの質問を考慮する必要があります (3 番目の質問はオプションです)

    1. キャッシュされた読み込み

    2. キャッシュの無効化

    3. キャッシュされた更新 (オプション)

    質問 1:

    キャッシュをロードするために必要な作業は非常に簡単です。どのクエリでも、まずキャッシュにクエリを実行し、キャッシュにヒットがない場合はデータベースを確認します。

    質問 2:

    キャッシュを無効にするには、データベースに変更 (更新、削除) が行われたときに忘れずにキャッシュを削除するだけです。

    質問 3:

    データが更新されると、キャッシュは無効化および削除されませんが、このオプションの操作により、キャッシュが常に最新であるという効果を得ることができます。

    質問 3 に関しては、データベースが正常に更新される前にキャッシュを更新しないでください。この時点でキャッシュが復元されないと、ダーティなデータが表示される可能性があります。

    返事
    0
  • 天蓬老师

    天蓬老师2017-04-18 09:15:22

    mybatis-redis には解決策があります。https://github.com/mybatis/redis-cache

    を参照してください。

    返事
    0
  • 怪我咯

    怪我咯2017-04-18 09:15:22

    @Cacheable を実装しており、インターセプトして service に直接アクセスしてデータを取得するために dao または redis レイヤー メソッドで使用されます。

    返事
    0
  • キャンセル返事