私はこれを行うために収集したオンラインリソースからPDO結果をredis cacheに保存したいと考えています。Redis Cache MYSQLの結果
$domain = 'www.example.com';
function getStat($domain) {
global $pdo;
global $redis;
$statement = "SELECT * FROM mc_visitor_session WHERE website = \'$domain\'";
$hash = md5($statement);
if (!$redis->get($hash . '-cache')) {
$query = $pdo->query($domain);
if ($result = $query->execute()) {
$record = $query->fetchAll(\PDO::FETCH_ASSOC);
$redis->set($hash . '-cache', serialize($record));
$redis->expire($hash . '-cache', 86400);
echo 'RESULT FROM MYSQL';
pretty_print($record);
}
}
$results = unserialize($redis->get($hash . '-cache'));
//will show this if it's already in cache.
echo 'RESULT FROM REDIS';
pretty_print($results);
}
getStat($domain);
上記のコードがうまくいきます。しかし、私はpdoの準備ステートメントではなく、pdoクエリを使用して、クエリを準備し安全に実行することなく、それを使用したいと思っています。しかし、私は、クエリ文からハッシュを取得して、redisのキーとして使用する必要があります。
これは私がredisでキャッシュしたいクエリの1つで、他のクエリには複数のPDOバインドパラメータを必要とするWHERE文が2つ以上含まれています。
これは、これを行う最良の方法ではない可能性があります。これを改善してより安全にする方法の提案をお願いします。
ありがとうございます。私はチュートリアルに従っていたので、レディスキーになるとちょっと厚いです。私はちょうどuseridまたはgroupidなどのredisキーのハッシュベースの他のフォームを実装しています。あなたが言及するように、単一のmysqlクエリのキャッシュは効率的ではありません。しかし、あなたのコードのおかげで、私は速いアクセスのためにredis-cacheの1つのjson文字列に15-20のmysqlクエリで構成されるリクエスト全体をキャッシュするだけです。 –