クエリ結果をキャッシュするとシステムのサービス機能が大幅に向上し、基盤となるサービスやデータベースへの負担が軽減されることは誰もが知っています。ページング条件を使用したキャッシュの場合、さまざまなページング条件に従って複数のキーをキャッシュすることもできます。
SortedSet に基づくページング クエリ キャッシュ ソリューション
最初に思い浮かぶ解決策は、@see ListOperations< を使用することです。 ;K, V> ページング条件に従って複数のキーを使用する代わりに、1 つのキーを使用してページングなしですべてのデータを Redis にキャッシュし、ページング条件に従って範囲 (キー、開始、制限) を使用してページング結果を取得します。 (推奨学習: Redis ビデオ チュートリアル )
これは問題を引き起こします。キャッシュが失敗すると、同時書き込みキャッシュによりデータの重複が発生します。そこで、パスすることを考えました。同時実行中に重複データを処理するには set を使用します。@参照 ZSetOperations
コード ロジックは次のとおりです:
range(key,start,limit)按照分页条件获取缓存,命中则直接返回 缓存未命中,查询(没有分页条件)数据库或是调用(没有分页)底层接口 add(key,valueScoreMap<value,score>)写入缓存,expire设置缓存时间 当需要清理缓存时,直接删除key,如果是因为数据新增和删除,可以add(key,value,score)或remove(key,value)
redis は分割されますスコアに従ってマップ内のデータを値の昇順に並べます。一般にスコアスコアは SQL 文の filedA 順の filedA の値です。これによりデータの一貫性が保証されます。
しかし
このキーによってキャッシュされた値は確かにホット データですが、少数のデータのみが頻繁に使用され、残りはまったく使用されない可能性があります。 , データが 100 ページある場合、実際に使用されるのは最初の 10 ページだけです。ページ、これもキャッシュ領域の無駄につながります。Redis 仮想メモリが使用されている場合は、一定の影響もあります。
SQL クエリが元のページング クエリから非ページング クエリに変更されました。キャッシュが失敗すると、システムの処理能力が以前より低下します (特に大きなテーブルの場合)。
Redis 関連の詳細はこちら技術記事については、Redis 入門チュートリアル 列にアクセスして学習してください。
以上がRedis がページング クエリを解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。