Data Grid での RESP プロトコルエンドポイントの使用
Data Grid RESP エンドポイントを使用してリモートキャッシュと対話する
概要
Red Hat Data Grid
Data Grid は、高性能の分散型インメモリーデータストアです。
- スキーマレスデータ構造
- さまざまなオブジェクトをキーと値のペアとして格納する柔軟性があります。
- グリッドベースのデータストレージ
- クラスター間でデータを分散および複製するように設計されています。
- エラスティックスケーリング
- サービスを中断することなく、ノードの数を動的に調整して要件を満たします。
- データの相互運用性
- さまざまなエンドポイントからグリッド内のデータを保存、取得、およびクエリーします。
Data Grid のドキュメント
Data Grid のドキュメントは、Red Hat カスタマーポータルで入手できます。
Data Grid のダウンロード
Red Hat カスタマーポータルで Data Grid Software Downloads にアクセスします。
Data Grid ソフトウェアにアクセスしてダウンロードするには、Red Hat アカウントが必要です。
多様性を受け入れるオープンソースの強化
Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、用語の置き換えは、今後の複数のリリースにわたって段階的に実施されます。詳細は、Red Hat CTO である Chris Wright のメッセージ をご覧ください。
1. Data Grid RESP エンドポイント
シングルポートエンドポイントでは、RESP エンドポイントはデフォルトで有効になっています。Redis クライアント接続は自動的に検出され、内部コネクターにルーティングされます。RESP エンドポイントは以下で動作します。
- スタンドアロンの Data Grid Server デプロイメントは、各サーバーインスタンスが独立して実行する構成であり、その動作はスタンドアロンの Redis と完全に同等です。
- サーバーインスタンスが相互にデータを複製または分散する、クラスター化された Data Grid Server デプロイメント。クラスター化されたデプロイメントは、クライアントにフェイルオーバー機能を提供します。
前提条件
- Data Grid Server をインストールします。
手順
検証
Data Grid Server を起動するときに、次のログメッセージを確認します。
[org.infinispan.SERVER] ISPN080018: Started connector Resp (internal)
Redis クライアントを使用して RESP エンドポイントに接続できるようになりました。たとえば、Redis CLI を使用すると、次のようにしてエントリーをキャッシュに追加できます。
redis-cli -p 11222 --user username --pass password
127.0.0.1:11222> SET k v OK 127.0.0.1:11222> GET k "v" 127.0.0.1:11222> quit
1.1. RESP エンドポイントのキャッシュの設定
RESP エンドポイントは respCache
キャッシュを自動的に設定して開始します。このキャッシュの設定は次のとおりです。
-
Data Grid Server のクラスタリングモードに応じて、
local-cache
またはdistributed-cache
になります。 -
キーと値の両方に対して
application/octet-stream
エンコードを使用します。 -
RESPHashFunctionPartitioner
ハッシュパーティショナー。Redis クライアントで使用される CRC16 ハッシュをサポートします。
キャッシュの明示的な設定
RESP コネクターの要件に違反しない限り、キャッシュのカスタム設定を指定できます。違反すると、サーバーが例外を出力し、起動しません。主な制約は次のとおりです。
-
ハッシュパーティショニング関数は、
org.infinispan.distribution.ch.impl.RESPHashFunctionPartitioner
にする必要があります。 -
キーエンコーディングは
application/octet-stream
にする必要があります。
明示的なキャッシュ設定の例を次に示します。
XML
<distributed-cache name="respCache" aliases="0" owners="2" key-partitioner="org.infinispan.distribution.ch.impl.RESPHashFunctionPartitioner" mode="SYNC" remote-timeout="17500" statistics="true"> <encoding media-type="application/octet-stream"/> </distributed-cache>
JSON
{ "respCache": { "distributed-cache": { "aliases": ["0"], "owners": "2", "key-partitioner": "org.infinispan.distribution.ch.impl.RESPHashFunctionPartitioner", "mode": "SYNC", "statistics": true, "encoding": { "media-type": "application/octet-stream" } } } }
YAML
respCache: distributedCache: aliases: - "0" owners: "2" keyPartitioner: "org.infinispan.distribution.ch.impl.RESPHashFunctionPartitioner" mode: "SYNC" statistics: "true" encoding: mediaType: "application/octet-stream"
Data Grid コンソールでキャッシュエントリーを表示する場合は、Protobuf エンコーディングを使用してキャッシュ値のエンコーディングを設定します (value media-type="application/x-protostream"
)。
明示的な RESP エンドポイント設定
シングルポートエンドポイントで使用される暗黙的な設定がニーズに合わない場合は、明示的な設定を利用できます。
XML
<endpoints> <endpoint socket-binding="default" security-realm="default"> <resp-connector cache="mycache" /> <hotrod-connector /> <rest-connector/> </endpoint> </endpoints>
JSON
{ "server": { "endpoints": { "endpoint": { "socket-binding": "default", "security-realm": "default", "resp-connector": { "cache": "mycache" }, "hotrod-connector": {}, "rest-connector": {} } } } }
YAML
server: endpoints: endpoint: socketBinding: "default" securityRealm: "default" respConnector: cache: "mycache" hotrodConnector: ~ restConnector: ~
2. キャッシュの Redis 論理データベースへのマッピング
キャッシュ aliases
設定属性を使用して、キャッシュを Redis 論理データベースにマップします。デフォルトの respCache
は論理データベース 0
にマップされます。
Redis では Redis Cluster の使用時にデータベース 0
のみがサポートされるのに対し、Data Grid ではクラスターモードでも複数の論理データベースを使用できます。
3. Redis コマンド
Data Grid RESP エンドポイントは、次の Redis コマンドを実装します。
- APPEND
- AUTH
- BLPOP
- BLMPOP
- BRPOP
- CLIENT GETNAME
- CLIENT ID
- CLIENT INFO
- CLIENT LIST
- CLIENT SETINFO
- CLIENT SETNAME
- COMMAND
- CONFIG
- CLUSTER KEYSLOT
- 注記
このコマンドにはすべての必須フィールドが含まれますが、一部のフィールドは Data Grid に適用されないため
0
に設定されます。 - CLUSTER SHARDS
- CLUSTER SLOTS
- DBSIZE
- DECR
- DECRBY
- DEL
- DISCARD
- ECHO
MULTI コマンドを参照してください。
- EXISTS
- EXPIRE
- EXPIREAT
- EXPIRETIME
- 注記
Data Grid はまだ複数の Redis データベースをサポートしていないため、このコマンドは
FLUSHDB
のように動作します。 - FLUSHDB
- GET
- GETDEL
- GETEX
- GETRANGE
- 注記
このコマンドは非推奨になりました。代わりに適切なフラグを指定した
SET
コマンドを使用します。 - HDEL
- HELLO
- HEXISTS
- HGET
- HGETALL
- HINCRBY
- HINCRBYFLOAT
- HKEYS
- HLEN
- HMGET
- HMSET
- HRANDFIELD
- HSCAN
- HSET
- HSETNX
- HSTRLEN
- HVALS
- INCR
- INCRBY
- INCRBYFLOAT
- 注記
この実装では、実際の Redis サーバーが返すすべての属性を返そうとします。ただし、ほとんどの場合、値は取得できないか、Data Grid に適用されないため、
0
に設定されます。 - KEYS
- LINDEX
- 注記
現在の実装では、時間計算量は O(N) です。N はリストのサイズになります。
- LLEN
- LCS
- 注記
現在の実装では、ソースと宛先が同じリストである場合のローテーションはアトミックです。異なるリストの場合、resp キャッシュがトランザクションを使用するように設定されていない限り、同時操作または障害に対する一貫性は緩くなります。
- LMPOP
- LPOP
- LPOS
- LPUSH
- LPUSHX
- LRANGE
- LREM
- LSET
- LTRIM
- 注記
このコマンドは、キーと値によって使用されているメモリーを返します。エントリーに関連付けられた追加のメタデータによって使用されるメモリーは含まれません。
- 注記
このコマンドは実際の Redis サーバーと同じフィールドを返しますが、すべての値は
0
に設定されます。 - MGET
- 注記
このコマンドは常に空のモジュールリストを返します。
- MSET
- MSETNX
- 注記
現在の実装では、緩やかな分離レベルとなっています。Redis はシリアル化可能なトランザクションを提供しますが、Data Grid は読み取りコミットされていない分離を提供します。
- PERSIST
- PFADD
- PEXPIRE
- PEXPIREAT
- PEXPIRETIME
- PING
- 注記
このコマンドは非推奨になりました。適切なフラグを指定した
SET
コマンドを使用します。 - PSUBSCRIBE
- PUBSUB CHANNELS
- PUBSUB NUMPAT
- PTTL
- PUBLISH
- PUNSUBSCRIBE
- QUIT
- RANDOMKEY
- RPOP
- RPOPLPUSH
- RPUSH
- RPUSHX
- READONLY
- READWRITE
- RENAME
- RENAMENX
- リセット
- SADD
- SCARD
- 注記
タイムアウト内に使用されないと、カーソルはリープされます。タイムアウトは 5 分になります。
- SDIFF
- SDIFFSTORE
- 注記
Data Grid では、このコマンドの使用を禁止してデータベース 0 のみをサポートする Redis Cluster とは異なり、ローカルモードとクラスターモードの両方で SELECT コマンドを使用できます。
- SET
- 注記
このコマンドは非推奨になりました。代わりに適切なフラグを指定した
SET
コマンドを使用します。 - 注記
このコマンドは非推奨になりました。代わりに適切なフラグを指定した
SET
コマンドを使用します。 - SETRANGE
- SINTER
- SINTERCARD
- SINTERSTORE
- SISMEMBER
- SORT
- SORT_RO
- SMEMBERS
- SMISMEMBER
- 注記
現在の実装では、緩やかな分離レベルとなっています。クライアントは、要素なしでソースと宛先のセットを表示できます。この操作はアトミックではないため、ソースから要素が削除され、ターゲットセットへの挿入に失敗する可能性があります。
- SPOP
- SRANDMEMBER
- SREM
- SSCAN
- STRLEN
- 注記
このコマンドは非推奨になりました。代わりに
GETRANGE
コマンドを使用してください。 - SUBSCRIBE
- SUNION
- SUNIONSTORE
- TIME
- TOUCH
- TTL
- TYPE
- UNSUBSCRIBE
- UNWATCH
- WATCH
- ZADD
- ZCARD
- ZCOUNT
- ZDIFF
- ZDIFFSTORE
- ZINCRBY
- ZINTER
- ZINTERCARD
- ZINTERSTORE
- ZLEXCOUNT
- ZMPOP
- ZMSCORE
- ZPOPMAX
- ZPOPMIN
- ZUNION
- ZUNIONSTORE
- ZRANDMEMBER
- ZRANGE
- ZRANGEBYLEX
- ZRANGEBYSCORE
- ZREVRANGE
- ZREVRANGEBYLEX
- ZREVRANGEBYSCORE
- ZRANGESTORE
- ZRANK
- ZREM
- ZREMRANGEBYLEX
- ZREMRANGEBYRANK
- ZREMRANGEBYSCORE
- ZREVRANK
- ZSCAN
- ZSCORE