JDBC Wrapper Valkey キャッシュ検証 — Spring Boot + HikariCP で導入する
application.yml の設定変更と ApplicationRunner によるウォームアップで、Spring Boot アプリに Remote Query Cache Plugin を統合。ノードベースと Serverless の両構成で動作確認した。
「java」タグが付いたコンテンツ一覧
application.yml の設定変更と ApplicationRunner によるウォームアップで、Spring Boot アプリに Remote Query Cache Plugin を統合。ノードベースと Serverless の両構成で動作確認した。
1時間の連続負荷でヒット率98.9%を確認。10分アイドル後もタイムアウト再発なし。公式ドキュメントの接続再利用推奨と合わせ、Serverless + ウォームアップが本番で使える条件を整理した。
ノードベース+TLS構成との比較で初回タイムアウトがServerless固有の問題と確定。ウォームアップ接続+5秒待機でCacheMonitorを回復させ、Serverlessの運用メリットを活かせることを実機検証した。
シリーズ全 3 回の検証で発見した Java SDK v2 のハマりポイントを整理。HMAC 未対応、enum 名の不一致、クラス名の混乱など 6 つの落とし穴と対処法。
TranslatePinData による PIN の平文を経由しない再暗号化と、CMAC によるデータ完全性検証を Java SDK で実装。アクワイアラ処理の核心である鍵の中継を検証する。
カード発行者の 3 つの主要な暗号処理を Java SDK で実装。GeneratePinData が PEK と PVK の 2 鍵を同時に要求する仕組みなど、複数の専用鍵が協調する決済処理の実態を検証する。
Java SDK で 4 種類の決済用暗号鍵を作成・使用し、用途外操作のエラーから TR-31 KeyUsage による用途分離を体験する。KMS に慣れた開発者が最初に戸惑うポイントを整理。
AWS Advanced JDBC Wrapper 3.3.0 の Remote Query Cache Plugin を ElastiCache for Valkey Serverless で検証。初回接続で必ずタイムアウトが発生し CacheMonitor が SUSPECT 状態に陥る問題を発見。ノードベースでは発生しない Serverless 固有の課題を整理した。
AWS Advanced JDBC Wrapper 3.3.0 の Remote Query Cache Plugin を Aurora PostgreSQL(100万行)+ ElastiCache for Valkey(ノードベース)で検証。749msの集計クエリが2msに短縮。TTL による整合性制御も期待通り動作した。
AWS JDBC Wrapper を 2.6.4 → 3.2.0 にアップグレードし、PostgreSQL と MySQL で Blue/Green Switchover を再検証。MySQL の接続失敗はタイミング依存(0〜1回)であることが判明。3.x 移行の判断基準をまとめる。
Aurora MySQL で Blue/Green Switchover を検証し、PostgreSQL との違いを比較。IN_PROGRESS フェーズが3秒と短い一方、BG プラグインでも0〜1回の接続エラーが発生する可能性がある。HikariCP の旧 Writer 接続問題はエンジン共通。Plain JDBC は復旧後も旧ホストに31秒間接続し続けた。
Blue/Green Switchover 中のダウンタイムを Plain JDBC・HikariCP リトライ・AWS JDBC Driver BG プラグインの3パターンで比較。プラグインは検証した400クエリ中0回の接続失敗。HikariCP は旧 Writer に接続し続ける落とし穴も発見した。
aws-advanced-jdbc-wrapper 2.6.4 が slf4j-api 1.7.36 を推移的依存で持ち込み、HikariCP 6.x が要求する SLF4J 2.x と競合する。exclusion で 1.7 を除外し slf4j-api 2.0 を明示的に指定する。
Blue/Green Switchover 中に全接続が切断された後、HikariCP が DNS キャッシュ経由で旧 Writer に再接続してしまう問題。書き込みワークロードでは read-only transaction エラーが発生する。PostgreSQL でも MySQL でも同じ挙動。