JWT ベースの OpenAPI 認可フロー:ThinkPHP と Gin の実装比較

概要 マルチテナント SaaS プラットフォームでは、外部システムがデータを安全に取得できるよう OpenAPI を公開する。本記事では「アプリ鍵 + シークレット」方式で発行される短期 RefreshToken を用いた認可フローを、PHP(ThinkPHP)と Go(Gin)でそれぞれ実装し、設計とコードを比較する。 認可フローのステップ テナントごとに一意の ClientID / ClientSecret を事 ...

5月21日 17:50 投稿

Redisの高度なテクニック:底層ストレージデータ構造とメモリ最適化

はじめに Redisは高性能なキャッシュミドルウェアとして知られており、他のキャッシュシステムと比較して多様なデータ構造をサポートしています。String、List、Set、SortedSet、HashなどがRedisが外部でサポートするデータ構造ですが、内部でのストレージ方法は伝統的な理解とは異なります。Redisは各データ構造タイプに対して最適化を行っており、異なるデータに応じて異 ...

5月21日 03:36 投稿

CentOS 7.6環境におけるRedis 6.2.6のインストールとサービス管理設定

CentOS 7.6にRedis 6.2.6を導入する際、ソースコードからのビルド(wgetでの取得およびmake)が完了した後のステップとして、システムサービスへの登録方法には大きく分けて2つのアプローチがあります。本記事では、付属のユーティリティスクリプトを利用する方法と、推奨されるsystemdユニットファイルを手動で作成する方法について解説します。 1. 付属スクリプト「inst ...

5月20日 21:37 投稿

Redis分散ロックとトランザクションの実装

1. Redis分散ロックの仕組み Redisにおける分散ロックは、複数のクライアントが同一リソースを同時に操作する競合状態を防ぐために使われます。ロック取得にはSETNXコマンド(存在しない場合のみ設定)を使用し、成功時は1を返却します。ロックの保持を確実にするため、トランザクション処理とPIPELINEの併用が必要です。 2. トランザクションの役割 RedisではMULTI/EXECコ ...

5月20日 16:21 投稿

Redisのトランザクション処理:MULTI/EXECとLuaスクリプトの比較分析

Redisにおけるトランザクション処理は、主に「MULTI/EXECコマンドによるトランザクションモード」と「Luaスクリプト」の2つのアプローチが存在します。 結論から述べると、それぞれの特性は以下の通りです。 **トランザクションモード (MULTI/EXEC)** * 隔離性を保証します。 * 永続性の保証は困難です。 * 限定的な原子性を持ちますが、ロールバック機能はサポー ...

5月19日 11:33 投稿

Redis 5.0.7ソースコード解析:双方向リンクリスト

Redisにおける双方向リンクリストの実装は、adlist.hとadlist.cというファイルに記述されています。 一、データ構造 Redisで実装されている双方向リンクリストは、一般的な双方向リンクリストと基本的に同じ構造を持っています。 単一ノード: 1 typedef struct listNode { 2 struct listNode *prev; 3 struct listNode *next; 4 void *value; 5 } listNode; ...

5月19日 05:24 投稿

Dockerを用いたRedisクラスタ(1マスター2スレーブ)+ センチネルモードの実装

サーバ環境 サーバ名 IPアドレス OSバージョン マスターサーバ 10.30.10.1 centos7.6 スレーブサーバ1 10.30.10.2 centos7.6 スレーブサーバ2 10.30.10.3 centos7.6 注意点:3台以上のサーバが必要で、2n+1(n≧1)のルールを満たす必要があります。そうでないと、センチネルが自動的にマスター-スレーブを切り替えることができません。 Dockerを使用した ...

5月18日 17:20 投稿

Redisクラスタ構成の実装と運用

Redisシャーディング技術 シャーディングの必要性 Redisに保存されるデータ量が増大するにつれて、パフォーマンスが低下する問題が発生します。この問題を解決するためにシャーディング技術が採用されます。 シャーディング手法の種類 クライアントサイドシャーディング アプリケーション層でデータ分割を実施し、どのデータをどのRedisインスタンスに格納するかをプロ ...

5月18日 08:41 投稿

Redis SETNXを用いた分散ロックの実装と注意点

分散システムにおける同時実行制御において、RedisのSETNXコマンドは重要な役割を果たします。特にユーザーごとの操作排他制御が必要な場面で効果を発揮します。 SETNXによる排他制御の基本実装 以下は、ユーザーが特定のアクティビティでギフトを受け取る際の排他制御の実装例です: public String obtainReward(int eventId, int rewardId, String userId) { if ( ...

5月18日 03:14 投稿

Redisクラスタ構成によるシステムパフォーマンス最適化手法

大規模ユーザー環境では、データベースへのアクセス集中による負荷増大とシステム性能低下が課題となります。この問題に対処するため、Redisを用いたデータキャッシュ戦略を実装し、データベース負荷を軽減しながらアクセス速度の向上を図ります。 一主二従+センチネル構成の採用理由 Redisの並行処理能力をさらに高めるため、主従クラスタを構築し読み取り/書き込み分離 ...

5月16日 19:14 投稿