LoginSignup
0
0

More than 3 years have passed since last update.

俺でもわかるRedisの中身をMySQLにぶちこむ方法

Last updated at Posted at 2020-11-26

俺です。
CacheStorageとしてよくつかうRedisですが、たまに中身をチェックしたい人生を迎えるときがあるとおもいます。

鼻ほじりながら keys * したら早いけど非力なRedis君は音を上げてしまうかもしれませんし、
RedisCommandだけで頑張るのがしんどいときはRDBMSにぶちこむと捗るよというメモをのこします。

でもちょっとまってもしも俺がAthena玄人なら...

コネクタ使ったほうが楽そうです
https://docs.aws.amazon.com/ja_jp/athena/latest/ug/athena-prebuilt-data-connectors-redis.html

以下人生を踏み倒したい俺向け

Redis

キー一覧を取得する

僕はkeys負荷死したくないので前者の手段を使います。

  • ElatiCache RedisならSnapshotから複製して実行する
  • ReadEndpointをアプリケーション側で参照してないならReadEndpointに実行でもいいかも
$ redis-cli -c -h hogefugare-dis.com --scan > keysfile

キーに登録されているTypeを取得する

  • typeごとにMySQLに作るテーブル列を洗い出します
$ redis-cli -c -h hogefugare-dis.com
redis-cli> type <キー一覧取得で取得したキーいくつか指定>

Redisからキー指定でvalueを抽出する

  • keyのtypeがhashだったときの例です。
  • datetime型のvalueが含まれている場合はMySQLへ楽にLoadできるように取り出すタイミングで加工するのが楽ちんかと
  • redis-cliは --csv オプションを使うとCSV形式で取得できるのが超よいですね
  • hgetallだとtypeとvalue両方出力されるのでhmgetでtype指定で抜きだします。hgetallの結果を加工してvalueだけのcsvファイルを作るもアリだとおもいます
  • 1行ずつvalueを抽出するのは本当に遅いので並列実行がおすすめ
REDIS_HOST=hogefugare-dis.com
cat keysfile|  while read KEY
do
    result=$(redis-cli -c -h ${REDIS_HOST} --csv  hmget ${KEY}  hoge fuga ..取得したいtypeを並べるのです..)
    echo "$result"
done > keydata.csv

MySQL

テーブル作成とデータロード

  • typeにあわせてRDB側にテーブル作ります
CREATE TABLE hogehoge (
    hoge int(11),
    fuga varchar(768),
    bar json
)
  • データロード
LOAD DATA LOCAL INFILE 'keydata.csv' INTO TABLE hogehoge FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';

データロード後煮るのも焼くのも好きにどうぞでレッツエンジョイ

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0