ユーザ用ツール

サイト用ツール


redis

Redis

インストール

$ brew install redis

サーバ起動

デフォルト設定で起動(port 6379を使用)

$ redis-server 

port 6379をマスターにしてport 6380で起動

$ redis-server --port 6380 --slaveof 127.0.0.1 6379

コンフィグファイルを指定して起動

$ redis-server ./redis-master.conf

sentinelを起動

$ redis-sentinel

コンフィグファイルを指定してsentinelを起動

$ redis-sentinel ./redis-sentinel.conf

コマンドラインツール

クライアント起動

$ redis-cli -h 127.0.0.1 -p 6379

DB番号を指定

$ redis-cli -n 1

コマンド

大文字/小文字どちらでも動作します。

共通

キーを全て取得

KEYS *

指定したキーのデータ型を調べる

TYPE key

サーバの情報取得。引数で指定したセクションのみ取得することも可能

info 
info replication   
info server
info sentinel

指定番号のDBに変更

select 1

hash型データの操作

keyに対して保存された値がハッシュでなければエラーになる。

ハッシュが持っているキーを全部取得する。

HKEKS key

ハッシュが持っている値を全部取得する。

HVALS key

ハッシュが持っているキーと値を全部を取得

HGETALL key

バルク処理

ver 2.8から。

コマンドを羅列したファイルを作る。改行コードをCR+LF(windows)で保存

set nyan nyannyan
set wang wangwang
cat data.txt | redis-cli --pipe

redis運用の注意点

keysは絶対に使わない

keysは要するにテーブルフルスキャンで、とてもCPU負荷の大きいコマンドです。後述のとおりRedisはシングルスレッドゆえkeys処理中は他のコマンドを受け付けなくなります。

このコマンドをアプリケーションから安易に実行したことが原因で、かなり有名な会社が運営しているサービスやソーシャルゲームでも不具合を出した事例があります。要注意

メモリは十分に

メモリ重要。全てのデータがメモリに乗るようにしましょう。

Redisはシングルスレッド

CPUコアの多いマシンを使っても性能は上がりません。遅いからと言ってCPUの良いインスタンスに変えても改善しないことがほとんどです。

遅い場合は

  • メモリが足りているか
  • アプリ内で O(n) のコマンドを乱発していないか

あたりをチェックしましょう。

connectionのtimeoutを設定しよう

特にコネクションプールする場合は、サーバ側にconnection timeoutを設定しましょう。

大抵のアプリは終了時にコネクションの切断などしていないのため、redisサーバ側に死んでいるコネクションが溜まっていき、いずれfile descriptorの限界を超えて新規接続ができなくなります。

redisサーバのtimeoutはredisクライアント側よりも大きい値にすべきです。クライアントより先にサーバ側でconnectionが破棄されると、クライアントはコネクション破棄を検知できずに死んだコネクションへ読み書きを行ってしまうためです。

redis.txt · 最終更新: 2018/11/07 08:46 by nullpon