Redis 缓存 MYSQL 个结果

Redis Cache MYSQL results

我希望将 PDO 结果存储在 redis 缓存中,所以我从网上收集的资源中这样做了。

$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 语句。

这可能不是最好的方法,所以我可以就如何改进它以使其更安全征求建议。

我在 SO 的其他地方看到了这个 "Smart" Caching System using PDO and Memcache

将您的 PDO 调用包装在一个函数中,该函数将散列语句和参数数组。

$name = 'querycache-'.md5(serialize(array($sql, $params)));

您还需要问问自己 fine-tuning 您的数据库是否使用适当的索引并让它使用自己的缓存系统不会比缓存到 Redis 更快。

$query = $pdo->query($statement);而不是$query = $pdo->query($domain);