シナリオの説明最近、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 が中国に進出
月収10万元の起業の夢を実現するミニプログラム起業支援プランドメイン名をどこで購入したか忘れましたか...
過去 1 年間、開発者エコシステムをめぐるクラウド ベンダー間の競争はますます激化しています。なぜこ...
春は耕作、秋は収穫、農業はずっと中国の発展における主要産業です。農業は古代から多くの注目を集めており...
Apple App Store キーワードランキング リストの最適化は常に激動の時代です。リスト内の...
今日、Sutu.com で電子書籍リーダーに関するレポートを見ましたが、今年の電子書籍の売上は昨年の...
Yahoo の外部リンク クエリ ツールが閉鎖されて以来、SEO 業界は外部リンクの数を測定するため...
Hostkvm の香港 VPS には 2 つのデータセンターがあり、1 つは葵湾、もう 1 つは大埔...
あっという間に、2012年の旧正月が過ぎました。新年の喜びが完全に薄れる前に、多くの草の根ウェブマス...
[編集者注] この記事は、@C7210 によって Smashing Magazine から翻訳され、...
検索エンジンマーケティングでは、企業が自社の商品やサービスに関連するキーワードを購入し、入札すること...
テンセントテクノロジーニュース(劉学同)北京時間9月6日のニュース、海外メディアの報道によると、テク...
「ウェブサイトオンラインカスタマーサービスシステムに関する個人的な見解(パート1)」では、ウェブサイ...
この記事の内容:情報フロー広告とは?情報フロー広告入門表示フォームチャネル引用申請プロセス舞台裏の運...
数年前に業界のウェブサイトを運営し、今日まで続けていれば、ある程度の成功を収めていたでしょう。現在、...
中国文化は奥深く、長い歴史を持っています。漢字は深い文化的遺産を持ち、多くの意味を表しています。オン...