introduction to redis
DESCRIPTION
Redis を社内で紹介する際に作成したもの。2012年5~6月頃。当時バージョン 2.6 リリース前。 社に関わる記述は全て除去。TRANSCRIPT
Introduction to Redis
Katsuji Ishikawa <[email protected]>
もとい
menu
• Redis の歴史• Redis の採用事例• Redis の特徴• Redis さわってみた
歴史•2009年 Salvatore Sanfilippo がLLOOGG ( http://lloogg.com/ ) とゆー解析サービスのパフォーマンス改善のためにつくりはじめた
• 2010年 VMware がスポンサーになった• http://redis.io/topics/sponsors
採用事例• http://bit.ly/eTETf2• blizzard• digg• Engine Yard• Github• stackoverflow• The Guardian• ニコニコ動画
特徴• インメモリベースの key-value store• データの永続化• スナップショット• 追記ファイル• 格納できるデータ量 = 搭載メモリ容量• その制約をこえる‘Redis VM’が実装された(ver. 2.0 )ものの非推奨 & ver. 2.4 で打ち切り☠
• 様々なデータ構造を value として持てる• string• list• hash• set• sorted set
• ここをみるが早いよ• http://redis.io/topics/data-types-intro• default port: 6379• 複数のデータベースを持てる: 複数ポートで LISTEN させなくてよい
• redis.conf: database N (N=16 by default)• 指定がなければ 0 (db0) を使う
• 豊富なコマンド• 100以上• http://redis.io/commands• 各言語のクライアントライブラリが充実• http://redis.io/clients• pip install redis hiredis• jemalloc 採用• Linux ではデフォルト
• 野良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..)
さわってみた
• redis-cli コマンド• redis-cli info• memcached や tokyotyrant でいう stats みたいなもん
• redis-cli shutdown• redis-cli config set ほげほげ• 設定(の一部)を動作中に変えられる• データ保存先やログレベルは変えられた
• vm.overcommit_memory = 1• (ほぼ)必須なカーネルパラメータ♥•スナップショット構築時や追記ファイルの再構築時に redis-server が fork => メモリ確保できず ERROR になることがある
• 一導入設定例
• 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 も設定
• 同時接続数について• c10k 考慮してなかった?ためか起動スクリプトに ulimit 必要
• たぶん ver. 2.6 からは setrlimit するようになる• https://github.com/antirez/redis/issues/246• https://github.com/antirez/redis/commit/58732c23d53d6fc652668a516556ea182b0ed0f8
• memcached, tokyotyrant はしてくれる
• 個人的に検証(自腹)• m1.large• てきとーな4096バイトくらいの文字列を900,000 位いれた
• ファイルサイズ: スナップショット, 追記型ファイルともに 3.5G
• 起動後のロード所要時間 & shutdown 所要時間• ともに 40秒くらい, ロード中に get するとエラーが返る
• 感想• スナップショットいらないかも?• 追記型ファイルつかうし・・Disk I/O 無駄じゃね• メモリいっぱいになったらどうするよ?• 5つの振るまいが選べる• volatile-lru ,allkeys-lru, volatile-random, allkeys->random (allkeys-randomなきがする), volatile-ttl , noeviction
• http://redis.io/• http://try.redis-db.com/• http://thechangelog.com/post/2801342864/episode-0-4-5-redis-with-salvatore-sanfilippo
• http://gihyo.jp/dev/feature/01/redis
リンク