Pocket

初めまして、システムエンジニア新卒1年目の菅原です。

今回は初めてredisを触ってみたので紹介します。

Redisに触れてみた背景

今年の9月半ばに職場の先輩たちとisucon6に参加しました。

残念ながら敗退してしまいましたが、これまでパフォーマンスをここまで意識したことはなく、参加チームの通過者や本戦出場者の中でもMysqlのデータをRedisに移行してパフォーマンスを速くしているチームが多い印象でした。

少し調べてみるとRDBMSのような複雑な処理にはRedisのキーバリューストア(KVS)型は向かないが、すべてのデータセットをメモリ内に読み込むため、とても高速で高いパフォーマンスをすることができることが分かりました。

パフォーマンスに問題があった場合Redisを使えることがパフォーマンスチューニングにおいては大切なことなのでそんなRedisを触らないわけにはいかないということで初めて触ってみました。

Redisの特徴

RedisとはREmote DIctionary Serverの略語であり、イタリアのSalvatore Sanfilippo氏が開発を創始したKey-Value型のNoSQLであります。

  • インメモリベース
    • すべてのデータがメモリ上に保持されるため,更新・参照が非常に高速です。
  • 永続化
    • インメモリの高速性を持ちながら,同時にディスクベース・データストアの永続性をも備えているのが特徴です。Redisの永続化機構は,定期的に(または更新回数などの条件により)メモリ上のデータセットのスナップショットをファイル(.rdb)にダンプし,再起動時にはこのスナップショットの内容をメモリに読み込むことにより,前回ダンプした状態までデータセットを復元します。
  • 多彩なデータ構造
    • String(文字列)
    • List(連結リスト)
    • Set(重複のない集合)
    • Sorted Set(ソート済みのSET)
    • Hash(連想配列)

複数の文字列要素からなるデータ構造をバリューとして持つことができ,通常の文字列型のバリューと同じようにキーで参照することができます。

引用元:http://gihyo.jp/dev/feature/01/redis/0001

Redisのインストール

今回の環境

  • mac OS
  • さくらVPS
  • php5.3.3

使った環境はさくらVPS上でインストールしていきました。

ではインストールからしてみましょう。

上記コマンドでredisがインストールすることができました。

動作確認

では動作確認

以下のような画面が出てサーバーが立ち上がったことが確認できます。

%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-11-03-20-20-31

別のターミナルにてredis-cliが使えるか確認

pingと打てばPONGと返ってきます。これでサーバーが立ち上がっていることがわかります。

redis.conf 設定

このときバックアップを念のためにとっておきましょう

このconfファイルを編集していきます。

デーモンの設定を有効にします。

ログファイルの出力先を変更します。

サーバのログの情報量を設定します。

サーバのログの情報量を設定します。

メモリのダンプファイルを保存する場所を変更します。

これでredisの設定ができましたので次は自動起動スクリプトを以下のように記述していきましょう

sudo vim /etc/init.d/redis

以下コマンドで設定を反映します。

下記のようなレスポンスが返って来ると成功しています。

これでredisを扱う環境と簡単な設定ができました。

php 側から redis 動作確認

ではphp側から実際に軽く使ってみましょう

php側からredisを扱うことができるライブラリをインストール

これでphp側からredisを扱うことができます。

では以下コードでちゃんと返答があることを確認してみましょう。

index.php

%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-11-06-21-39-21

ちゃんと返ってきていることがわかりました。

まとめ

Redisの環境構築と簡単な取り出しまでですが簡単に設定することが出来ました。

ただデータ構造が複雑でどの場面でどの構造を使うことができるかを知ることが大切であると感じました。

しかし、Redisを使うことができるとかなり高速なパフォーマンスを出すことができるので実際に多くのデータを使って試してみることが慣れるために必要だと思いました。

次回は実際にmysqlとの比較などをしてパフォーマンスの検証をしてみたいと思います。

Pocket

Join Us !

ウエディングパークでは、一緒に働く仲間を募集しています!
ご興味ある方は、お気軽にお問合せください(カジュアル面談から可)

採用情報を見る