0
我希望將PDO結果存儲在redis緩存中,以便從我收集的在線資源中進行操作。Redis緩存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緩存的查詢之一,而其他查詢包含多個需要多個PDO綁定參數的WHERE語句。
這可能不是最好的方法,所以我可能會問我如何改善這個問題以提高安全性。
謝謝。我正在關注教程,所以當它涉及到redis密鑰時,我有點厚。我現在只是在userid或groupid等實現其他形式的redis關鍵散列基礎。如你所說,單個mysql查詢的緩存效率不高。但是現在感謝您的代碼,我只是將整個請求(可能包含15-20個mysql查詢)緩存到redis-cache中的一個json字符串中以便快速訪問。 –