9.2.32 Redis

Redisは、オプションの耐久性をサポートするインメモリー・データ構造ストアです。Redisは、格納されたデータ構造を一意のキーで識別する単純なキー/値データ・ストアです。値は格納されるデータ構造です。

Redisハンドラは、Redisへの変更データ・キャプチャのレプリケーションと、ハッシュ・マップ、ストリーム、JSONという3つの異なるデータ構造でのそのデータの格納をサポートしています。

9.2.32.1 Redisハンドラでサポートされるデータ構造

9.2.32.1.1 ハッシュ・マップ

もっとも一般的なユーザーのユースケースです。キーは、Redisにプッシュされるデータの表および行の一意の識別子です。各キーの場所に格納されるデータ構造は、ハッシュ・マップです。ハッシュ・マップのキーは列名で、値は列値です。

挿入、更新および削除の動作

ソース証跡ファイルには、Redisにデータをプッシュできる挿入、更新および削除操作が含まれます。Redisハンドラは、次のように挿入、更新および削除を処理します。

挿入 - Redisハンドラは、Redisに新しいキーを作成します。その値は、ハッシュ・マップ・キーが列名で、ハッシュ・マップ値が列値であるハッシュ・マップです。

更新 - Redisハンドラは、Redisの既存のハッシュ・マップ構造を更新します。既存のハッシュ・マップは、処理された更新操作の列名と値で更新されます。ハッシュ・マップ・データは更新されて置換されないため、イメージの完全な更新は必要ありません。

主キーの更新 - Redisハンドラでは、古いキーをデータ構造とともに新しいキー名のみに移動し、その後、更新がハッシュ・マップで実行されます。

削除 - Redisハンドラは、キーとそれに対応するデータ構造をRedisから削除します。

Null値の処理

Redisハッシュ・マップは、nullを値として格納できません。Redisハッシュ・マップにはnull以外の値が必要です。デフォルトの動作では、生成されたハッシュ・マップからnull値の列を省略します。更新によって列値がnull以外の値からnull値に変更された場合、列キーおよび値はハッシュ・マップから削除されます。

ユーザーがnull値をRedisに伝播する必要がある場合があります。ただし、Redisハッシュ・マップはnull値を格納できないため、かわりに代表値が伝播されるように構成する必要があります。これは、次の2つのパラメータを設定して構成されます。
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}

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}

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}

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

デフォルトが推奨されます。opモードでは、操作は受信したとおりに処理されます。txモードでは、操作はトランザクションのコミット時にキャッシュされ、処理されます。tx モードのほうが低速で、作成されるメモリー・フットプリントが大きくなります。

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の場合: ${tableName}:${primaryKeys}

ストリームの場合: ${tableName}

Redisは、キー値のデータ・ストアです。このテンプレートの解決された値によって、操作のキーが決まります。
gg.handler.name.createIndexes オプション true | false true

次の統合タイプについて、レプリケートされた表ごとに索引が自動的に作成されます: hashmaps | jsonsユーザーは、これらの索引を削除したり、追加の索引を作成できます。作成された索引の情報は、replicat <replicat name>.log fileに記録されます。

gg.handler.name.omitNullValues オプション true | false true null値は、Redisハッシュマップ構造の値として格納できません。統合タイプのハッシュマップとストリームの両方にハッシュ・マップが格納されます。デフォルトでは、列値がnullの場合、Redisにレプリケートできません。デフォルトでは、列値がnullに変更された場合は、ハッシュマップから削除する必要があります。これをfalseに設定すると、null値を表す構成値がRedisにレプリケートされます。
gg.handler.name.nullValueRepresentation オプション 任意の文字列

"" (空の文字列)

統合タイプがハッシュマップまたはストリームの場合にのみ有効です。gg.handler.name.omitNullValuesがfalseに設定されている場合にのみ有効です。ここで構成された値が、nullのかわりにRedisにレプリケートされる値です。

gg.handler.name.metaColumnsTemplate オプション カンマ区切りのメタ列キーワードの任意の文字列。 なし

これは、Redisへの出力に追加する1つ以上のメタ列を選択するように構成できます。「メタ列のキーワード」を参照してください。

gg.handler.name.insertOpKey オプション 任意の文字列 "I" これは、metacolumn ${optype}が構成されている場合にレプリケートされる挿入の操作タイプの値です。
gg.handler.name.updateOpKey オプション 任意の文字列 "U"

これは、metacolumn ${optype}が構成されている場合にレプリケートされる更新の操作タイプの値です。

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に接続する場合は、trueに設定します。SSLには、基本認証(証明書がサーバーからクライアントに渡される)または相互認証(証明書がサーバーからクライアントに渡され、証明書がクライアントからサーバーに渡される)を指定できます。基本認証は、通常、資格証明(ユーザー名とパスワード)を使用して結合されるため、接続の両側が他方を認証できます。SSLは、処理中のメッセージの暗号化を提供します。

9.2.32.3 セキュリティ

Redisへの接続は複数の方法で保護できます。セキュリティのタイプを構成し、それによって選択するのがRedisサーバーです。RedisクライアントであるRedisハンドラは、サーバーのセキュリティと一致するように構成する必要があります。

Redisサーバー - 接続リスナー - これはRedisアプリケーションです。

Redisクライアント - 接続のコール元 - これはOracle GoldenGate Redisハンドラです。

Redisサーバーでどのようなセキュリティが設定されているかは、Redis管理者に確認してください。次に、Redisサーバーのセキュリティ構成に従うようにRedisハンドラを構成します。

9.2.32.4 資格証明を使用した認証

これは、RedisサーバーがRedisクライアントを認証するために、Redisクライアントが提供した資格証明(ユーザー名とパスワード)を必要とする単純なセキュリティです。このセキュリティでは、処理中のメッセージの暗号化は提供されません。

 gg.handler.name.username=<username>
gg.handler.name.password=<password>

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>

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>

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/*

9.2.32.8 Redisハンドラ・クライアント依存性

Redisハンドラは、Jedisクライアントを使用してRedisに接続します。

グループID: redis.clients

アーティファクトID: jedis

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