繁体   English   中英

Redis Cache 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缓存的查询之一,其他查询包含多个WHERE语句,该语句需要多个PDO绑定参数。

这可能不是最好的方法,所以我可能会要求我提出一些建议,以改进该方法以使其更安全。

我在SO的其他地方看到了使用PDO和Memcache的“智能”缓存系统

将PDO调用包装在将对该语句和参数数组进行哈希处理的函数中。

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

您还需要问自己是否对数据库进行微调,使用适当的索引并让其使用自己的缓存系统不会比缓存到Redis更快。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM