9.2.32 Redis
Redisは、オプションの耐久性をサポートするインメモリー・データ構造ストアです。Redisは、格納されたデータ構造を一意のキーで識別する単純なキー/値データ・ストアです。値は格納されるデータ構造です。
Redisハンドラは、Redisへの変更データ・キャプチャのレプリケーションと、ハッシュ・マップ、ストリーム、JSONという3つの異なるデータ構造でのそのデータの格納をサポートしています。
- Redisハンドラでサポートされるデータ構造
- Redisハンドラの構成プロパティ
- セキュリティ
- 資格証明を使用した認証
- SSL基本認証
- SSL相互認証
- Redisハンドラの依存性
Redisハンドラは、Jedisクライアント・ライブラリを使用してRedisサーバーに接続します。 - Redisハンドラ・クライアント依存性
Redisハンドラは、Jedisクライアントを使用してRedisに接続します。
親トピック: ターゲット
9.2.32.1 Redisハンドラでサポートされるデータ構造
9.2.32.1.1 ハッシュ・マップ
挿入、更新および削除の動作
ソース証跡ファイルには、Redisにデータをプッシュできる挿入、更新および削除操作が含まれます。Redisハンドラは、次のように挿入、更新および削除を処理します。
挿入 - Redisハンドラは、Redisに新しいキーを作成します。その値は、ハッシュ・マップ・キーが列名で、ハッシュ・マップ値が列値であるハッシュ・マップです。
更新 - Redisハンドラは、Redisの既存のハッシュ・マップ構造を更新します。既存のハッシュ・マップは、処理された更新操作の列名と値で更新されます。ハッシュ・マップ・データは更新されて置換されないため、イメージの完全な更新は必要ありません。
主キーの更新 - Redisハンドラでは、古いキーをデータ構造とともに新しいキー名のみに移動し、その後、更新がハッシュ・マップで実行されます。
削除 - Redisハンドラは、キーとそれに対応するデータ構造をRedisから削除します。
Null値の処理
Redisハッシュ・マップは、nullを値として格納できません。Redisハッシュ・マップにはnull以外の値が必要です。デフォルトの動作では、生成されたハッシュ・マップからnull値の列を省略します。更新によって列値がnull以外の値からnull値に変更された場合、列キーおよび値はハッシュ・マップから削除されます。
gg.handler.redis.omitNullValues=false
gg.handler.redis.nullValueRepresentation=null
ユーザーは、一部の値をnullとして指定する必要があります。しかし、次も合法です。
この場合、null値表現は空の文字列または“”
です。
gg.handler.redis.nullValueRepresentation=CDATA[]
この場合、null値表現はタブに設定されます。
gg.handler.redis.nullValueRepresentation=CDATA[\t]
バイナリ値のサポート
デフォルト機能では、すべてのデータをJava文字列としてRedisハッシュ・マップにプッシュします。バイナリ値は、Java文字列として表されるようにBase64に変換する必要があります。その結果、バイナリ値はBase64として表されます。または、次の構成プロパティを設定することで、ユーザーはバイトをRedisハッシュ・マップにプッシュして元のバイト値を保持できます。
gg.handler.redis.dataType=bytes
Redisのハッシュ・マップ・データの例:
127.0.0.1:6379> hgetall TCUSTMER:JANE 1) "optype" 2) "I" 3) "CITY" 4) "DENVER" 5) "primarykeycolumns" 6) "CUST_CODE" 7) "STATE" 8) "CO" 9) "CUST_CODE" 10) "JANE" 11) "position" 12) "00000000000000002126" 13) "NAME" 14) "ROCKY FLYER INC."
構成例
gg.handlerlist=redis gg.handler.redis.type=redis gg.handler.redis.hostPortList= localhost:6379 gg.handler.redis.createIndexes=true gg.handler.redis.mode=op gg.handler.redis.metacolumnsTemplate=${position},${optype},${primarykeycolumns}
親トピック: Redisハンドラでサポートされているデータ構造
9.2.32.1.2 ストリーム
Redisストリームは、Kafkaトピックに類似しています。Redisキーはストリーム名です。ストリームの値は、Redisストリームにプッシュされる個々のメッセージです。個々のメッセージは、メッセージがRedisにプッシュされたときのタイムスタンプとオフセットによって識別されます。個々のメッセージの値は、キーが列名で値が列値であるハッシュ・マップです。
挿入、更新および削除の動作
各操作とその関連データは、すべてRedis Streamsに伝播されます。したがって、すべての操作がRedis Streamsの新しいメッセージとして表示されます。
Null値の処理
Redisストリームでは、ハッシュ・マップが各メッセージの値として格納されます。Redisハッシュ・マップは、nullを値として格納できません。Null値は、ハッシュ・マップ機能の場合とまったく同様に機能します。
バイナリ値のサポート
デフォルト機能では、すべてのデータをJava文字列としてRedisハッシュ・マップにプッシュします。バイナリ値は、Java文字列として表されるようにBase64に変換する必要があります。その結果、バイナリ値はBase64として表されます。または、次の構成プロパティを設定することで、ユーザーはバイトをRedisハッシュ・マップにプッシュして元のバイト値を保持できます。
gg.handler.redis.dataType=bytes
ストリーム・データは、Redisに次のように表示されます。
127.0.0.1:6379> xread STREAMS TCUSTMER 0-0 1) 1) "TCUSTMER" 2) 1) 1) "1664399290398-0" 2) 1) "optype" 2) "I" 3) "CITY" 4) "SEATTLE" 5) "primarykeycolumns" 6) "CUST_CODE" 7) "STATE" 8) "WA" 9) "CUST_CODE" 10) "WILL" 11) "position" 12) "00000000000000001956" 13) "NAME" 14) "BG SOFTWARE CO."
2) 1) "1664399290398-1" 2) 1) "optype" 2) "I" 3) "CITY" 4) "DENVER" 5) "primarykeycolumns" 6) "CUST_CODE" 7) "STATE" 8) "CO" 9) "CUST_CODE" 10) "JANE" 11) "position" 12) "00000000000000002126" 13) "NAME" 14) "ROCKY FLYER INC."
構成例
gg.handlerlist=redis gg.handler.redis.type=redis gg.handler.redis.hostportlist=localhost:6379 gg.handler.redis.mode=op gg.handler.redis.integrationType=streams gg.handler.redis.metacolumnsTemplate=${position},${optype},${primarykeycolumns}
親トピック: Redisハンドラでサポートされているデータ構造
9.2.32.1.3 JSON
キーは、Redisにプッシュされるデータの表および行の一意の識別子です。値はJSONオブジェクトです。JSONオブジェクトのキーは列名ですが、JSONオブジェクトの値は列値です。
ソース証跡ファイルには、Redisにデータをプッシュできる挿入、更新および削除操作が含まれます。Redisハンドラは、次のように挿入、更新および削除を処理します。
挿入 - Redisハンドラは、キーに新しいJSONを作成します。
更新 - Redisハンドラは、指定されたキーのJSONを、更新のデータを反映する新しいJSONに置き換えます。JSONは置換されるため、ソース証跡ファイルでイメージの完全な更新をお薦めします。
削除 - Redisのキーと対応するJSONデータ構造が削除されます。
Null値の処理
JSON仕様では、null値をJSON nullとしてサポートしています。したがって、データのnull値はJSON nullとして伝播されます。JSON仕様でnull値がサポートされているため、null値の置換はサポートされていません。RedisハンドラがJSONを送信するように構成されている場合、 gg.handler.redis.omitNullValues
構成プロパティもgg.handler.redis.nullValueRepresentation
構成プロパティも効果がありません。仕様ごとのJSONは次のように表されます: “fieldname”: null
バイナリ値のサポート
JSON仕様では、バイナリ値はBase64として表されます。したがって、すべてのバイナリ値はBase64として変換および伝播されます。プロパティgg.handler.redis.dataType
を設定しても効果はありません。通常、JSONはRedisに次のように表示されます。
127.0.0.1:6379> JSON.GET TCUSTMER:JANE"{\"position\":\"00000000000000002126\",\"optype\":\"I\",\"primarykeycolumns\":[\"CUST_CODE\"],\"CUST_CODE\":\"JANE\",\"NAME\":\"ROCKY FLYER INC.\",\"CITY\":\"DENVER\",\"STATE\":\"CO\"}"
構成例:
gg.handlerlist=redis gg.handler.redis.type=redis gg.handler.redis.hostportlist=localhost:6379 gg.handler.redis.mode=op gg.handler.redis.integrationType=jsons gg.handler.redis.createIndexes=true gg.handler.redis.metacolumnsTemplate=${position},${optype},${primarykeycolumns}
親トピック: Redisハンドラでサポートされているデータ構造
9.2.32.2 Redisハンドラの構成プロパティ
表9-37 Redisハンドラの構成プロパティ
プロパティ | 必須/オプション | 有効な値 | デフォルト | 説明 |
---|---|---|---|---|
gg.handlerlist=name |
必須 | 任意の文字列 | なし | Redisハンドラの名前を指定します。 |
gg.handler.name.type |
必須 | redis | なし |
Redisハンドラを選択します。 |
gg.handler.name.mode |
オプション | op | tx |
op |
デフォルトが推奨されます。 |
gg.handler.name.integrationType |
オプション | hashmaps | streams | jsons |
hashmaps |
Redisの統合タイプを設定します。ハッシュ・マップを選択すると、データはハッシュ・マップとしてRedisにプッシュされます。ストリームを選択すると、データはRedisストリームにプッシュされます。JSONを選択すると、データはJSONとしてRedisにプッシュされます。 |
gg.handler.name.dataType |
オプション | string | bytes |
string |
ハッシュマップおよびストリーム統合タイプにのみ有効です。文字列データまたはバイト・データをRedisにプッシュするかどうかを制御します。文字列を選択すると、すべてのバイナリ・データがRedis Base64エンコードにプッシュされます。バイトを選択すると、バイナリ・データは変換されずにRedisにプッシュされます。
|
gg.handler.name.keyMappingTempate |
オプション | 文字列とテンプレート・キーワードの任意の組合せ。 |
ハッシュマップおよびjsonの場合: ストリームの場合: |
Redisは、キー値のデータ・ストアです。このテンプレートの解決された値によって、操作のキーが決まります。 |
gg.handler.name.createIndexes |
オプション | true | false |
true
|
次の統合タイプについて、レプリケートされた表ごとに索引が自動的に作成されます: |
gg.handler.name.omitNullValues |
オプション | true | false |
true |
null値は、Redisハッシュマップ構造の値として格納できません。統合タイプのハッシュマップとストリームの両方にハッシュ・マップが格納されます。デフォルトでは、列値がnullの場合、Redisにレプリケートできません。デフォルトでは、列値がnullに変更された場合は、ハッシュマップから削除する必要があります。これをfalseに設定すると、null値を表す構成値がRedisにレプリケートされます。 |
gg.handler.name.nullValueRepresentation |
オプション | 任意の文字列 |
|
統合タイプがハッシュマップまたはストリームの場合にのみ有効です。 |
gg.handler.name.metaColumnsTemplate |
オプション | カンマ区切りのメタ列キーワードの任意の文字列。 | なし |
これは、Redisへの出力に追加する1つ以上のメタ列を選択するように構成できます。「メタ列のキーワード」を参照してください。 |
gg.handler.name.insertOpKey |
オプション | 任意の文字列 | "I" |
これは、metacolumn ${optype} が構成されている場合にレプリケートされる挿入の操作タイプの値です。
|
gg.handler.name.updateOpKey |
オプション | 任意の文字列 | "U" |
これは、 |
gg.handler.name.deleteOpKey |
オプション | 任意の文字列 | "D" |
これは、metacolumn ${optype} が構成されている場合にレプリケートされる削除の操作タイプの値です。
|
gg.handler.name.trucateOpKey |
オプション | 任意の文字列 | "T" |
これは、metacolumn ${optype} が構成されている場合にレプリケートされる切捨ての操作タイプの値です。
|
gg.handler.name.maxStreamLength |
オプション | 正の整数 | 0 |
ストリームの最大長を設定します。この値より多くのメッセージをストリームにプッシュすると、最も古いメッセージが削除され、最大ストリーム・サイズが適用されます。デフォルト値は0で、最大ストリーム長に制限がないことを意味します。 |
gg.handler.name.username |
オプション | 任意の文字列 | なし |
必要に応じて、Redisへの接続用にユーザー名を設定するために使用されます。 |
gg.handler.name.password |
オプション | 任意の文字列 | なし |
必要に応じて、Redisへの接続用にパスワードを設定するために使用されます。 |
gg.handler.name.timeout |
オプション | 整数 | 15000 |
接続とソケットの両方のタイムアウトをミリ秒で設定するプロパティ。 |
gg.handler.name.enableSSL |
オプション | true | false |
false |
SSLが有効になっているRedisに接続する場合は、 |
親トピック: Redis
9.2.32.3 セキュリティ
Redisへの接続は複数の方法で保護できます。セキュリティのタイプを構成し、それによって選択するのがRedisサーバーです。RedisクライアントであるRedisハンドラは、サーバーのセキュリティと一致するように構成する必要があります。
Redisサーバー - 接続リスナー - これはRedisアプリケーションです。
Redisクライアント - 接続のコール元 - これはOracle GoldenGate Redisハンドラです。
Redisサーバーでどのようなセキュリティが設定されているかは、Redis管理者に確認してください。次に、Redisサーバーのセキュリティ構成に従うようにRedisハンドラを構成します。
親トピック: Redis
9.2.32.4 資格証明を使用した認証
これは、RedisサーバーがRedisクライアントを認証するために、Redisクライアントが提供した資格証明(ユーザー名とパスワード)を必要とする単純なセキュリティです。このセキュリティでは、処理中のメッセージの暗号化は提供されません。
gg.handler.name.username=<username>
gg.handler.name.password=<password>
親トピック: Redis
9.2.32.5 SSL基本認証
このユースケースでは、Redisサーバーは証明書をRedisクライアントに渡します。これにより、クライアントはサーバーを認証できます。クライアントはサーバーに資格証明を渡し、これによりRedisサーバーはクライアントを認証できます。この接続はSSLであり、処理中のメッセージの暗号化を提供します。
gg.handler.name.enableSSL=true
gg.handler.name.username=<username>
gg.handler.name.password=<password>
Redisサーバーが署名されていない証明書をRedisクライアントに渡す場合、Redisハンドラをトラストストアで構成する必要があります。Redisサーバーが認証局によって署名された証明書を渡す場合、トラストストアは必要ありません。
Redisハンドラでトラストストアを構成するには次のようにします。
jvm.bootoptions=-Djavax.net.ssl.trustStore=<absolute path to truststore> -Djavax.net.ssl.trustStorePassword=<truststore password>
親トピック: Redis
9.2.32.6 SSL相互認証
このユースケースでは、Redisサーバーは証明書をRedisクライアントに渡します。これにより、クライアントはサーバーを認証できます。次に、Redisクライアントは証明書をRedisサーバーに渡します。これにより、サーバーはRedisクライアントを認証できます。この接続はSSLであり、処理中のメッセージの暗号化を提供します。
gg.handler.name.enableSSL=true
通常、この設定では、Redisクライアントにはトラストストアとキーストアの両方が必要です。構成は次のとおりです。
Redisハンドラでトラストストアを構成するには次のようにします。
jvm.bootoptions=-Djavax.net.ssl.keyStore=<absolute path to keystore> -Djavax.net.ssl.keyStorePassword=<keystore password> -Djavax.net.ssl.trustStore=<absolute path to truststore> -Djavax.net.ssl.trustStorePassword=<truststore password>
親トピック: Redis
9.2.32.7 Redisハンドラ依存性
Redisハンドラは、Jedisクライアント・ライブラリを使用してRedisサーバーに接続します。
Jedisへのリンクは次のとおりです: https://github.com/redis/jedis
JedisライブラリはOracle GoldenGate for Distributed Applications and Analytics (GG for DAA)に付属していないため、取得してから、Jedisクライアントを解決するためにgg.classpath configuration
プロパティを構成する必要があります。Oracle GoldenGate for Distributed Applications and Analytics (GG for DAA)に付属している依存性ダウンローダ・ユーティリティを使用して、Jedisをダウンロードできます。Redisハンドラは、Jedis 4.2.3を使用して開発されました。次に、gg.classpath
の構成例を示します: gg.classpath=/OGGBDinstall/DependencyDownloader/dependencies/jedis_4.2.3/*
親トピック: Redis
9.2.32.8 Redisハンドラ・クライアント依存性
Redisハンドラは、Jedisクライアントを使用してRedisに接続します。
グループID: redis.clients
アーティファクトID: jedis親トピック: Redis
9.2.32.8.1 jedis 4.2.3
commons-pool2-2.11.1.jar
gson-2.8.9.jar
jedis-4.2.3.jar
json-20211205.jar
slf4j-api-1.7.32.jar
親トピック: Redisハンドラ・クライアント依存性