どうも!トーマスです。

今回は「PhalconでMySQLとRedisを上手く組み合わせて使いたい」をコンセプトに書きます!

 

課題

  • MySQLのINDEXにあわせてクエリを発行したい
  • コネクションの切り替えをしたい
  • MySQLから一回取得したデータは更新があるまでキャッシュしておきたい

 

完成品

ienaga/RedisPlugin(GitHub)
 

Composer

 

準備するもの

  • phpredis
  • YAML

 

phpredis

 

YAML

 

これで準備OK!

 

簡単な使い方の説明

 

では課題を一個一個、解消していきたいと思います。

 

MySQLのINDEXにあわせてクエリを発行したい

開発と設計が並行して行われているような場合

プログラムの実装者とMySQL設計で想定されるクエリに差異が生じる事があります。

なので、Phalconのmetadata取得時にMySQLのINDEX情報も一緒に取得します。

続きを読む

 

app/config/services.phpに追記

 

テストテーブル

 

テストクラス

 

実行

 

発行されるクエリ

 

orz…

 

もちろん、INDEXはききません。

 

発行したいクエリ

 

となるように機能を拡張します。

 

 

これで、INDEXにマッチしたクエリを発行できる!

 

コネクションの切り替えをしたい

app/config/config.phpに追記

 

ymlでコネクション管理をする。

 

redis.ymlもDBの数だけ設定

 

app/config/services.phpに追記

 

MySQLから一回取得したデータは更新があるまでキャッシュしておきたい

find|findFirstで取得したデータをprefixで設定されたcolumnでキーを生成してキャッシュ。

更新があるまでredisにデータをキャッシュしてDBの負荷を減らしたい。

saveを経由したモデルを格納しておき、commit後にキャッシュを消す。

 

transaction, save

 

auto clear

 

まだまだ改善の余地ありだけど。

まずまずな仕上がりかなぁっと思います。

その後・・・

redisの公式サイトでも掲載してもらえました(^o^)

(ページの一番下だけど。。。)

http://redis.io/clients

 

 

あわせて読みたい記事