シナリオの説明最近、Redis を使用しているときに、分散ロックに似たシナリオに遭遇しました。 Redis の分散ロックの実装と同様に、ロックの解放に失敗しました。つまり、キャッシュを削除できなかったことになります。私はまた別のRedisの穴に足を踏み入れました... これはどのような状況ですか? また、どのようにトラブルシューティングすればよいですか? この記事では主にこれについてレビューします。 トラブルシューティングロックの解除に問題があるので、まずはロックを解除するコードを見てみましょう。 ロックを解除ロックを解除するには Lua スクリプトを使用します。コードロジックと Lua スクリプトは次のとおりです。 ロック解除サンプルコード
ロックを解除するために使用されるLuaスクリプト
削除スクリプトでは、まず Redis キーの古い値が取得され、入力パラメータ値と比較されます。両者が等しい場合にのみ削除されます。 解放が成功した場合、つまり Redis キャッシュが正常に削除された場合、戻り値は 1 になります。それ以外の場合は失敗し、戻り値は 0 になります。 一見すると、コードは問題ないように見えます。テストしてみましょう。 ただし、ロックを解除する必要があるため、その前にロックする必要があります。まずロックのロジックを見てみましょう。 ロックロックのロジックに関しては、コードに実装する方法が 2 つあります。 サンプルコード1
サンプルコード2
実際、それらの違いは、前者は RedisTemplate を使用し、後者は StringRedisTemplate を使用することです。
まずこの 2 つの方法をテストしてみてはいかがでしょうか? 試してみるそれぞれロックするには 2 つの方法を使用します。lock01 は k1 と v1、lock02 は k2 と v2 です。 k1 と k2 の値をそれぞれ見てみましょう (ツール: RDM、Redis Desktop Manager を使用)。 v1 には二重引用符がありますが、v2 には二重引用符がないことがわかります。 シリアル化の問題だと思います。 Redis の設定を見てみましょう。 Redisテンプレートの設定ロックを見るとわかるように、k1 は RedisTemplate を使用し、k2 は StringRedisTemplate を使用しています。それぞれの構成の違いは何ですか? RedisTemplate の構成は次のようにカスタマイズされます。
StringRedisTemplate の構成は SpringBoot のデフォルトの構成です。
PS: SpringBootのバージョンは2.1.13.RELEASEです StringRedisTemplate をクリックして確認してみましょう。
シリアル化設定に注意し、方法が何であるかを確認するためにフォローアップを続けます。
ご覧のとおり、StringRedisTemplate のキーと値は、デフォルトで StringRedisSerializer(StandardCharsets.UTF_8) によってシリアル化されます。 RedisTemplate のキーは StringRedisSerializer を使用し、値は Jackson2JsonRedisSerializer を使用してシリアル化されています (なぜこれを使用するかについては、ここでは書きません)。 この時点で、基本的に問題を特定できます。RedisTemplate の値のシリアル化が StringRedisTemplate と一致していません。 一貫性を保つために変更しても大丈夫でしょうか?確認してみてください。 推論を検証するRedisTemplate の値のシリアル化メソッドを StringRedisSerializer に変更します。
さらに 2 つのロック ロジックを呼び出して、k1 と k2 の値を確認します。 ご覧の通り、v1 の二重引用符はなくなり、ロックを解除するサービスは正常に削除できます。 まあ、それがここでの問題です。 2 つのシリアル化のソース コードについては、興味のある友人が引き続き学習できるので、ここでは詳しく説明しません。 まとめこの記事で発生した問題は、主に、ロックのロックと解除に異なる Redis テンプレートが使用され、これら 2 つのテンプレートが異なるシリアル化方法を使用しているために発生し、最終的にはシリアル化によって問題が発生します。 当時は本当に不注意だったので、しばらくは理解できませんでした... 実稼働環境に関しては、まるで奈落の底に立っているか、薄氷の上を歩いているかのように、依然として細心の注意を払う必要があります。 |
>>: ハイパーコンバージェンス「ハードからソフトへ」: ハイブリッド クラウド向けに設計された Azure Stack HCI が中国に進出
この記事では、基本的な SEO スキルを教えるのではなく、新しいサイトを構築するときに検索エンジンと...
バージョンの変更1.1 更新内容セキュリティ センターの管理者ユーザーは、スキャン済みおよび未スキャ...
今はチャネルが王様の時代です。発言権を持つチャネルディーラーの前では、サプライヤーは不利な立場に置か...
9月18日、2020年雲奇カンファレンスにおいて、アリババクラウドのデータミドルウェア製品が全面的に...
chicagovps は、DDOS 保護 VPS の提供を開始したことを発表しました。現在はニューヨ...
最近、友人たちが「なぜこの人たちはSEOを学ばないのか」「なぜこんな簡単な質問も理解できないのか」「...
大手ブランドといえば、コカコーラの独特な赤と白のフォント、ナイキのスウッシュ、アディダスのスリースト...
第1章第6節 フェイスプロジェクト---ホームページデザインホームページをどうデザインするかも重要な...
Racknerd は、米国ロサンゼルスの multacom データセンター専用の VPS を宣伝して...
ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービス世界は、最初に主導権を握...
1. ICBCは文書86号を使用してAlipayに強く反応し、多くの銀行が支払いインターフェースのク...
2021年、クラウドコンピューティング、ビッグデータ、人工知能に代表されるデジタル技術は、人類の生産...
Siyiou は杭州にある SEO 最適化会社です。Siyiou は 2003 年に設立されました。...
name.com の最新プロモーション: .com または .net ドメイン名を 0.99 ドルで...
ブログを書いている人は、ただ単に友達を作りたいだけではないと思います。オンラインでのつながりは価値の...