redis入門:大量のテストデータを投入する

スポンサーリンク
redis入門:大量のテストデータを投入する ノウハウ
redis入門:大量のテストデータを投入する
この記事は約4分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

今日は、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に送信しています。

ここで、各部分の解説を行います。

  1. seq 1 100000: 1から100,000までの整数を生成します。
  2. 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_1test_value_1のような形式です。
  • >> test.data: 生成されたSETコマンドをtest.dataというファイルに追加します。
  1. cat test.data | redis-cli --pipe: test.dataファイルに記録されたRedisのSETコマンドを一括でRedisに送信します。
  • redis-cli --pipe: パイプモードでredis-cliを起動します。これにより、一度に大量のコマンドを送信できます。

このコマンド全体は、Redisに対して大量のSETコマンドを一括で送信するための手法で、効率的なデータのロードを行うことができます。

おわりに

今日は、Redisで大量のテストデータを投入する方法についてご紹介しました。

よっしー
よっしー

何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。

それでは、また明日お会いしましょう(^^)

コメント

タイトルとURLをコピーしました