redis
差分
このページの2つのバージョン間の差分を表示します。
次のリビジョン | 前のリビジョン | ||
redis [2014/01/29 02:14] – 作成 nullpon | redis [2024/09/27 02:49] (現在) – [valkey] nullpon | ||
---|---|---|---|
行 1: | 行 1: | ||
- | ====== | + | ====== |
[[http:// | [[http:// | ||
+ | |||
+ | ===== valkey ===== | ||
+ | |||
+ | Redisのフォーク | ||
+ | |||
+ | * https:// | ||
===== インストール ===== | ===== インストール ===== | ||
行 6: | 行 12: | ||
$ brew install redis | $ brew install redis | ||
- | ===== 起動 ===== | + | ===== サーバ起動 ===== |
デフォルト設定で起動(port 6379を使用) | デフォルト設定で起動(port 6379を使用) | ||
行 20: | 行 26: | ||
$ redis-server ./ | $ redis-server ./ | ||
| | ||
+ | sentinelを起動 | ||
+ | |||
+ | $ redis-sentinel | ||
+ | |||
+ | コンフィグファイルを指定してsentinelを起動 | ||
+ | |||
+ | $ redis-sentinel ./ | ||
+ | |||
+ | ===== コマンドラインツール ===== | ||
+ | |||
+ | ==== クライアント起動 ==== | ||
+ | |||
+ | $ 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.1390961659.txt.gz · 最終更新: 2014/01/29 02:14 by nullpon