18
Introduction to Redis Katsuji Ishikawa <[email protected] >

Introduction to Redis

Embed Size (px)

DESCRIPTION

Redis を社内で紹介する際に作成したもの。2012年5~6月頃。当時バージョン 2.6 リリース前。 社に関わる記述は全て除去。

Citation preview

Page 1: Introduction to Redis

Introduction to Redis

Katsuji Ishikawa <[email protected]>

Page 2: Introduction to Redis

これをみましょう =>

http://bit.ly/n7BJBdhttp://redis.io以上!

Page 3: Introduction to Redis

もとい

Page 4: Introduction to Redis

menu

• Redis の歴史• Redis の採用事例• Redis の特徴• Redis さわってみた

Page 5: Introduction to Redis

歴史•2009年 Salvatore Sanfilippo がLLOOGG ( http://lloogg.com/ ) とゆー解析サービスのパフォーマンス改善のためにつくりはじめた

• 2010年 VMware がスポンサーになった• http://redis.io/topics/sponsors

Page 6: Introduction to Redis

採用事例• http://bit.ly/eTETf2• blizzard• digg• Engine Yard• Github• stackoverflow• The Guardian• ニコニコ動画

Page 7: Introduction to Redis

特徴• インメモリベースの key-value store• データの永続化• スナップショット• 追記ファイル• 格納できるデータ量 = 搭載メモリ容量• その制約をこえる‘Redis VM’が実装された(ver. 2.0 )ものの非推奨 & ver. 2.4 で打ち切り☠

Page 8: Introduction to Redis

• 様々なデータ構造を value として持てる• string• list• hash• set• sorted set

Page 9: Introduction to Redis

• ここをみるが早いよ• http://redis.io/topics/data-types-intro• default port: 6379• 複数のデータベースを持てる: 複数ポートで LISTEN させなくてよい

• redis.conf: database N (N=16 by default)• 指定がなければ 0 (db0) を使う

Page 10: Introduction to Redis

• 豊富なコマンド• 100以上• http://redis.io/commands• 各言語のクライアントライブラリが充実• http://redis.io/clients• pip install redis hiredis• jemalloc 採用• Linux ではデフォルト

Page 11: Introduction to Redis

• 野良make & インストール

• tar zxf redis-X.Y.Z

• cd redis-X.Y.Z

• make && make install

• make 32bit で x86_64 上で 32bit バイナリを作れる

• メモリ使用量少ないけどデータ量あまりもてない

• きっと 4G

• make test 固まったりする

• tcl8.5 が必要(CentOS 5.x は tcl8.4..)

さわってみた

Page 12: Introduction to Redis

• redis-cli コマンド• redis-cli info• memcached や tokyotyrant でいう stats みたいなもん

• redis-cli shutdown• redis-cli config set ほげほげ• 設定(の一部)を動作中に変えられる• データ保存先やログレベルは変えられた

Page 13: Introduction to Redis

• vm.overcommit_memory = 1• (ほぼ)必須なカーネルパラメータ♥•スナップショット構築時や追記ファイルの再構築時に redis-server が fork => メモリ確保できず ERROR になることがある

Page 14: Introduction to Redis

• 一導入設定例

• m1.xlarge (15GB !)

• daemonize yes

• loglevel notice

• logfile /mnt/var/log/redis.log

• dir /mnt/var/lib/redis

• appendonly yes

• appendfsync everysec

• スレーブには slaveof redis-slave.example.com 6379 も設定

Page 16: Introduction to Redis

• 個人的に検証(自腹)• m1.large• てきとーな4096バイトくらいの文字列を900,000 位いれた

• ファイルサイズ: スナップショット, 追記型ファイルともに 3.5G

• 起動後のロード所要時間 & shutdown 所要時間• ともに 40秒くらい, ロード中に get するとエラーが返る

Page 17: Introduction to Redis

• 感想• スナップショットいらないかも?• 追記型ファイルつかうし・・Disk I/O 無駄じゃね• メモリいっぱいになったらどうするよ?• 5つの振るまいが選べる• volatile-lru ,allkeys-lru, volatile-random, allkeys->random (allkeys-randomなきがする), volatile-ttl , noeviction