redis-infq-infQをredisに統合
infQと対応カスタマイズされたredisは昨年開発済みで、今から出して遊びましょう.(infQの紹介はinfQを参照-メモリに制限されないキュー)
1.インストール
コードアドレス:
infQ:https://github.com/chosen0ne/infQ.git
redis-infq:https://github.com/chosen0ne/redis-infq.git
2つのプロジェクトcloneを1つのディレクトリに移動し、次のコマンドを実行します.
makeが成功すると、redisと同様にredis-infq/src/ディレクトリの下でredis-serverが生成されます.
ここで、infQとredis-infqは必ず同じディレクトリの下にあることに注意してください.そうしないと、redis-infqをコンパイルするときにinfQの静的リンクライブラリが見つからないため失敗します.
2.サポートされているコマンド
1)qpush key value [value ... ]
複数のvalueをinfQインスタンスに追加します.keyが存在する場合、データ型がinfQではない場合、エラーWrong Type Errorが返されます.キーが存在しない場合、キーがキーのinfQインスタンスが作成されます.
2)qpop key
キーがkeyのinfQインスタンスからpopを返し、popから出たオブジェクトを返します.キーが存在しない場合は、Wrong Type Errorエラーを返します.
3)qjpop key
qpopと同様ですが、popから出たオブジェクトは返されません.
4)qlen key
キーがkeyのinfQのインスタンスの長さを返します.
5)qtop key
キーがkeyのinfQインスタンスの最初の要素を返します.
6)qdel key
キーがkeyのinfQインスタンスを削除します.
7)qat key index
戻りキーがkeyのinfQインスタンスで、indexに対応する要素が下に表示されます.
8)qrange key start stop
キーがkeyのinfQインスタンスを返し、範囲[start,stop]に対応するすべての要素を返します.
9)qpoprpush source destination
キーがsourceのinfQインスタンスpopから、popから出たオブジェクトrpushをキーがdestinationのlistに移動します.
3.プロファイル
デフォルトではredis-cliでinfQ関連コマンドを実行できますが、様々な言語のredisクライアントではinfQがサポートされていないため、infQをサポートするにはlist対応のコマンドをrenameする必要があります.具体的には、以下の通りです.
redis-infqで
プロジェクトフォルダの下、redis-rename.confプロファイルは上記の構成を完了し、直接
この構成を起動すればいいです.その後list関連コマンドでinfQを操作できます.
infQ関連プロパティの構成は、redisプロファイルで構成できます.具体的な構成例は次のとおりです.
4.運転
infoコマンドにより、現在redisが保有しているinfQの情報は、以下のようになります.
具体的な属性の意味は次のとおりです.
mem_block_size:infQのメモリブロックサイズ
pushq_blocks_num:push queueに含まれるblock数の上限
popq_blocks_num:pop queueに含まれるblock数の上限
以上はすべてのinfQインスタンスに共通するプロパティであり、以下は単一のinfQインスタンスプロパティである.
publks:現在のpush queueに含まれるblock数
poblks:現在のpop queueに含まれるblock数
ms:現在のinfQインスタンスで使用されているメモリサイズ
fs:現在のinfQインスタンスで使用されているファイルサイズ
dumper、loader、unlinker:3個のバックグラウンドスレッドの状態.
5.マスタスレーブ同期
redisマスターに対して同期から修正し,infQの同期をサポートした.マスタスレーブ同期では、infQのメタデータ、ファイルなどを転送する必要がありますが、これは後述します.
1.インストール
コードアドレス:
infQ:https://github.com/chosen0ne/infQ.git
redis-infq:https://github.com/chosen0ne/redis-infq.git
2つのプロジェクトcloneを1つのディレクトリに移動し、次のコマンドを実行します.
cd infQ
make
cd ../redis-infq
make
makeが成功すると、redisと同様にredis-infq/src/ディレクトリの下でredis-serverが生成されます.
ここで、infQとredis-infqは必ず同じディレクトリの下にあることに注意してください.そうしないと、redis-infqをコンパイルするときにinfQの静的リンクライブラリが見つからないため失敗します.
2.サポートされているコマンド
1)qpush key value [value ... ]
複数のvalueをinfQインスタンスに追加します.keyが存在する場合、データ型がinfQではない場合、エラーWrong Type Errorが返されます.キーが存在しない場合、キーがキーのinfQインスタンスが作成されます.
2)qpop key
キーがkeyのinfQインスタンスからpopを返し、popから出たオブジェクトを返します.キーが存在しない場合は、Wrong Type Errorエラーを返します.
3)qjpop key
qpopと同様ですが、popから出たオブジェクトは返されません.
4)qlen key
キーがkeyのinfQのインスタンスの長さを返します.
5)qtop key
キーがkeyのinfQインスタンスの最初の要素を返します.
6)qdel key
キーがkeyのinfQインスタンスを削除します.
7)qat key index
戻りキーがkeyのinfQインスタンスで、indexに対応する要素が下に表示されます.
8)qrange key start stop
キーがkeyのinfQインスタンスを返し、範囲[start,stop]に対応するすべての要素を返します.
9)qpoprpush source destination
キーがsourceのinfQインスタンスpopから、popから出たオブジェクトrpushをキーがdestinationのlistに移動します.
3.プロファイル
デフォルトではredis-cliでinfQ関連コマンドを実行できますが、様々な言語のredisクライアントではinfQがサポートされていないため、infQをサポートするにはlist対応のコマンドをrenameする必要があります.具体的には、以下の通りです.
rename-command LPUSH OLD_LPUSH
rename-command RPOP OLD_RPOP
rename-command LLEN OLD_LLEN
rename-command RPOPLPUSH OLD_RPOPLPUSH
rename-command QPUSH LPUSH
rename-command QPOP RPOP
rename-command QLEN LLEN
rename-command QPOPRPUSH RPOPLPUSH
redis-infqで
プロジェクトフォルダの下、redis-rename.confプロファイルは上記の構成を完了し、直接
この構成を起動すればいいです.その後list関連コマンドでinfQを操作できます.
infQ関連プロパティの構成は、redisプロファイルで構成できます.具体的な構成例は次のとおりです.
######################## Configuration for InfQ ##############################
# Specify the log level of InfQ
infq-logging-level INFO
# Data path for InfQ.
# Make sure the directory exist, or creation of InfQ will fail.
infq-data-path ./infq_data_path/
# Memory block size of InfQ
# 1MB = 1048576
# 10MB = 10485760
# 20MB = 20971520
infq-mem-block-size 10485760
# Number of memory blocks for push queue
infq-pushq-blocks-num 30
# Number of memory blocks for pop queue
infq-popq-blocks-num 30
# push queue block , dumper
# dump 。
# , IO; , dumper
# push queue 。
infq-dump-blocks-usage 0.5
4.運転
infoコマンドにより、現在redisが保有しているinfQの情報は、以下のようになります.
# Cluster
cluster_enabled:0
# Keyspace
db0:keys=3,expires=0,avg_ttl=0
# InfQ
mem_block_size:10485760, pushq_blocks_num:30, popq_blocks_num:30
c=[publks:1, poblks:0, fblks:0, ms:629145744, fs:0, dumper: (0, 0), loader: (0, 0), unlinker: (0, 0)]
b=[publks:1, poblks:0, fblks:0, ms:629145744, fs:0, dumper: (0, 0), loader: (0, 0), unlinker: (0, 0)]
a=[publks:1, poblks:0, fblks:0, ms:629145744, fs:0, dumper: (0, 0), loader: (0, 0), unlinker: (0, 0)]
具体的な属性の意味は次のとおりです.
mem_block_size:infQのメモリブロックサイズ
pushq_blocks_num:push queueに含まれるblock数の上限
popq_blocks_num:pop queueに含まれるblock数の上限
以上はすべてのinfQインスタンスに共通するプロパティであり、以下は単一のinfQインスタンスプロパティである.
publks:現在のpush queueに含まれるblock数
poblks:現在のpop queueに含まれるblock数
ms:現在のinfQインスタンスで使用されているメモリサイズ
fs:現在のinfQインスタンスで使用されているファイルサイズ
dumper、loader、unlinker:3個のバックグラウンドスレッドの状態.
5.マスタスレーブ同期
redisマスターに対して同期から修正し,infQの同期をサポートした.マスタスレーブ同期では、infQのメタデータ、ファイルなどを転送する必要がありますが、これは後述します.