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字符串中以便快速访问。 –