1

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

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

4

1 回答 1

3

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

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

于 2012-04-22T13:35:20.737 回答