gpt4 book ai didi

caching - Redis 缓存 MYSQL 结果

转载 作者:可可西里 更新时间:2023-11-01 11:30:04 26 4
gpt4 key购买 nike

我希望将 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 绑定(bind)参数的 WHERE 语句。

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

最佳答案

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

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

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

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

关于caching - Redis 缓存 MYSQL 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41682148/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com