首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Redis缓存MYSQL结果

Redis缓存MYSQL结果
EN

Stack Overflow用户
提问于 2017-01-17 01:46:20
回答 2查看 1.7K关注 0票数 0

我希望将PDO结果存储在redis缓存中,因此从我收集的在线资源中,我可以这样做。

代码语言:javascript
复制
$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 prepared语句,而不是不准备并安全地执行查询的pdo query。但我还需要从查询语句中获取散列,以便用作redis中的键。

这只是我想用redis缓存的查询之一,其他查询包含超过1条WHERE语句,这需要多个PDO绑定参数。

这可能不是最好的方法,所以我想请教一下我如何改进它,使它更安全。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-09 16:54:20

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

将PDO调用包装在一个函数中,该函数将对语句和参数数组进行散列处理。

代码语言:javascript
复制
$name = 'querycache-'.md5(serialize(array($sql, $params)));

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

票数 0
EN

Stack Overflow用户

发布于 2018-03-21 19:58:58

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41682148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档