Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Caching Redis缓存MYSQL结果_Caching_Redis_Analytics - Fatal编程技术网

Caching Redis缓存MYSQL结果

Caching Redis缓存MYSQL结果,caching,redis,analytics,Caching,Redis,Analytics,我希望将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->ge

我希望将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 Bind参数

这可能不是最好的方法,因此,我想问一下如何改进它以使其更安全。

我在其他地方看到了这一点

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

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

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

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

谢谢。我一直在学习教程,所以当谈到redis键时,我有点迷糊了。我现在只实现了基于userid或groupid等的其他形式的redis密钥散列。缓存单个mysql查询并不像您提到的那样高效。但多亏了您的代码,我现在只需将整个请求(可能包括15-20个mysql查询)缓存到redis缓存中的一个json字符串中,以便快速访问。