我已经阅读了很多关于Memcached的指南,但是,有些事情我不清楚:
1)我见过很多例子,看起来或多或少是这样的:
$sql = "SELECT `name` FROM `users` WHERE `id` = 1;";
$memcache->set(md5($sql), $sql, false, 60);
$memcache->get(md5($sql));
然而,由于我对Memcache的了解有限,我在这里看到一个严重的缺陷:我不能使用相同的方法来存储INSERT/UPDATE
请求的数据,因为从技术上讲,它会导致不同的哈希
作为一个解决方案,我想我可以使用这样的东西:创建一个可以执行以下操作的类/函数:
class db {
function insert($sql, $ttl, $key) { // $key would be the name of the key I would manually generate for each query. To maintain uniqueness for each user where needed, could be user_id_keyname
$memcache->set($key, $sql, false, $ttl);
mysql_query($sql);
}
function sel($sql, $ttl, $key) {
if ($memcache->get($key)) then return $memcache->get($key);
else {
$memcache->set($key, $sql, false, $ttl);
return mysql_query($sql);
}
这可能是解决我问题的正确方法吗?真的很想看到对代码的任何评论。 } }
答案 0 :(得分:3)
为什么要缓存INSERT
/ UPDATE
查询的结果?使用SELECT
查询的md5哈希没有错,因为您不需要任何其他信息来唯一标识结果集。您只想缓存SELECT
查询的结果,这样您就不必一直从数据库中检索数据。更新数据时,您不希望将其丢失,因此必须将查询发送到数据库。
您的示例中还有另一个问题。您实际上并未将任何查询结果存储在缓存中。您只存储无用的SQL查询。