よっしー
こんにちは。よっしーです(^^)
今日は、Redisで大量のテストデータを投入する方法についてご紹介します。
背景
Redisで大量のテストデータを投入する機会があったので、そのときの内容を備忘としてのこしました。
下記のサイトを参考にしました。
環境作成
ローカルにdockerでRedisの環境を作成しました。
作成ファイル一覧
下記のファイルを作成しました。
├── compose.yml
└── redis
└── Dockerfile
compose.yml
version: '3.7'
services:
redis:
build: ./redis
container_name: redis
hostname: redis-source
networks:
- net
redis-commander:
image: rediscommander/redis-commander
container_name: redis-commander
environment:
- REDIS_HOSTS=source:redis:6379
ports:
- "8081:8081"
networks:
- net
networks:
net:
redis/Dockerfile
FROM redis:7.2.0-alpine
コンテナ起動
下記のコマンドでコンテナを起動させます。
docker compose build
docker compose up -d
データ投入
下記のコマンでデータを投入します。
docker compose exec -it redis sh
rm test.data
seq 1 100000 | xargs -P $(nproc) -i sh -c "echo SET test_key_{} test_value_{} EX 60" >> test.data
cat test.data | redis-cli --pipe
ブラウザで「http://localhost:8081/」にアクセスして、データが登録されていることを確認する。
解説
このコマンドは、seq
コマンドを使用して1から100,000までの数字を生成し、それらの数字を元にredis-cli
コマンドでSET
コマンドを生成しています。最後に、生成されたSET
コマンドを一括でRedisに送信しています。
ここで、各部分の解説を行います。
seq 1 100000
: 1から100,000までの整数を生成します。xargs -P $(nproc) -i sh -c "echo SET test_key_{} test_value_{} EX 60" >> test.data
:
xargs
: 引数を取り、それを別のコマンドに渡すためのユーティリティです。-P $(nproc)
: 同時に実行されるジョブの最大数をCPUのコア数に設定します。-i
: 渡された引数を{}
で置き換えます。sh -c "echo SET test_key_{} test_value_{} EX 60"
: 渡された引数を使って、SET
コマンドを生成します。例えば、test_key_1
とtest_value_1
のような形式です。>> test.data
: 生成されたSET
コマンドをtest.data
というファイルに追加します。
cat test.data | redis-cli --pipe
:test.data
ファイルに記録されたRedisのSET
コマンドを一括でRedisに送信します。
redis-cli --pipe
: パイプモードでredis-cli
を起動します。これにより、一度に大量のコマンドを送信できます。
このコマンド全体は、Redisに対して大量のSET
コマンドを一括で送信するための手法で、効率的なデータのロードを行うことができます。
おわりに
今日は、Redisで大量のテストデータを投入する方法についてご紹介しました。
よっしー
何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント