现在的方案是,sql 作为key 查询结果序列化后 存入value 。表如果有数据修改添加删除,flushDB()。
但是整个项目只要有数据变更缓存就没了。
谁还有其他方案?
想知道的就是数据增删改对redis都有操作后再对数据库操作,redis里查询的永远是最新的,当某些原因redis里查不到时查数据库然后保存到reids里。
这种方案有谁实现了吗?
高洛峰2017-04-18 09:15:22
なぜ SQL をキーとして使用するのか...flushdb を実行するたびに考えが変わる可能性があります。製品を含むテーブルがあり、主キーが id である場合は、キーの詳細: 製品 ID を使用してキャッシュを作成できます。行レコードは値として使用され、データ型はハッシュまたは文字列です。ビジネスで主キーに基づいて特定の製品情報を確認する必要がある場合、最初に Redis にアクセスして詳細のキャッシュがあるかどうかを確認します。主キーにヒットがない場合は、キャッシュを直接取得することがあります。キャッシュを使用する場合は、データベースを確認し、クエリ結果のキャッシュを保存します。また、レコードが変更された場合、キャッシュを直接削除したり、キャッシュを更新したりすることもできます。
これは非常に単純な例にすぎません。Redis データ型は非常に豊富で、適切に使用すれば非常に快適に使用できます。また、上記の例では、ビジネスに応じて、各キャッシュの有効期間を 1 週間などに設定できます。一般に、ユーザーが古いコンテンツを閲覧することはほとんどないため、有効期限が切れて誰も閲覧しなくなった後は再構築されなくなり、Redis には常にホット データが保持されます。単なる古いデータの塊ではありません。役に立ったらいいねしてください。
ringa_lee2017-04-18 09:15:22
キャッシュの意味は、データベースで頻繁に使用されるデータを Redis に保存するなど、一般的なデータを保存して、毎回データベースにクエリを実行する必要がないようにすることです。
投稿者が直面した問題は、キャッシュ内のデータとデータベース内のデータの一貫性をどのように保つかということです。
上記の 表如果有数据修改添加删除,flushDB()
と同様、これはお勧めできません。
キャッシュされたデータの操作は、実際には 読み取り と 書き込み
に簡略化されます。アプリケーションが Redis にクエリを実行するときに、Redis が見つからない場合は、この時点でデータベースを確認し、見つかったデータを Redis に保存する必要があります。
データベース内のデータが変更された場合、上記の 数据增删改对redis都有操作后再对数据库操作
は実際には推奨されません。アプリケーションは最初にデータベースを変更し、成功後に Redis を更新する必要があります。最初に redis を更新したが、データベースの更新に失敗した場合はどうすればよいですか? Redis はダーティデータを保存しないのでしょうか?
さらに、キャッシュ内のデータには有効期限 (有効期限タイムアウト) を設定できます。有効期限が切れた後、(データがまったく変更されていない場合でも) データベースを再度チェックしてデータを更新します。 、少なくともデータベースの負荷を軽減します。
テーマの目的を見ると、データベース データのバックアップとして Redis を使用する方法がありますが、これは Redis キャッシュを使用する意味ではありません (データベースのマスター/スレーブ バックアップを検討する必要があるかもしれません)。
ご指摘のソリューションですが、トピックの説明を見ると、ソリューションは必要ありません(データの整合性などを考慮すると、高可用性構成をソリューションと呼ぶと思います)。
これは実際にはコードのロジックであり、コードの記述方法によって異なります。
伊谢尔伦2017-04-18 09:15:22
Spring には Redis プラグインがあり、小規模なプロジェクトには ehcache および Spring プラグインを使用する方が便利です。
迷茫2017-04-18 09:15:22
キャッシュ システムを実装するときは、次の 3 つの質問を考慮する必要があります (3 番目の質問はオプションです)
キャッシュされた読み込み
キャッシュの無効化
キャッシュされた更新 (オプション)
キャッシュをロードするために必要な作業は非常に簡単です。どのクエリでも、まずキャッシュにクエリを実行し、キャッシュにヒットがない場合はデータベースを確認します。
キャッシュを無効にするには、データベースに変更 (更新、削除) が行われたときに忘れずにキャッシュを削除するだけです。
データが更新されると、キャッシュは無効化および削除されませんが、このオプションの操作により、キャッシュが常に最新であるという効果を得ることができます。
質問 3 に関しては、データベースが正常に更新される前にキャッシュを更新しないでください。この時点でキャッシュが復元されないと、ダーティなデータが表示される可能性があります。
天蓬老师2017-04-18 09:15:22
mybatis-redis には解決策があります。https://github.com/mybatis/redis-cache
を参照してください。怪我咯2017-04-18 09:15:22
は @Cacheable
を実装しており、インターセプトして service
に直接アクセスしてデータを取得するために dao
または redis
レイヤー メソッドで使用されます。