Memcached密钥:需要一些澄清

时间:2012-04-22 12:29:53

标签: php get memcached set

我已经阅读了很多关于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);
  }

这可能是解决我问题的正确方法吗?真的很想看到对代码的任何评论。      }     }

1 个答案:

答案 0 :(得分:3)

为什么要缓存INSERT / UPDATE查询的结果?使用SELECT查询的md5哈希没有错,因为您不需要任何其他信息来唯一标识结果集。您只想缓存SELECT查询的结果,这样您就不必一直从数据库中检索数据。更新数据时,您不希望将其丢失,因此必须将查询发送到数据库。

您的示例中还有另一个问题。您实际上并未将任何查询结果存储在缓存中。您只存储无用的SQL查询。