Php Memcache和Mysqli Insert语句建议

Php Memcache和Mysqli Insert语句建议,php,mysqli,memcached,Php,Mysqli,Memcached,好的,过去几天我一直在围绕Memcache工作,试图整理我能找到的最有用的文章(主要来自Stackoverflow) 我了解使用memcache中的键创建值,并了解到正确/高效的键命名非常重要。使密钥唯一的最好方法似乎是使用$id。我的问题是,在没有$id的情况下,如何使密钥唯一(例如,如果$id只是在Mysqli数据库表中自动递增) Memcache插入和检索的示例如下: $sql = "INSERT INTO products SET id = $id, name = $name"; //

好的,过去几天我一直在围绕Memcache工作,试图整理我能找到的最有用的文章(主要来自Stackoverflow)

我了解使用memcache中的键创建值,并了解到正确/高效的键命名非常重要。使密钥唯一的最好方法似乎是使用$id。我的问题是,在没有$id的情况下,如何使密钥唯一(例如,如果$id只是在Mysqli数据库表中自动递增)

Memcache插入和检索的示例如下:

$sql = "INSERT INTO products SET id = $id, name = $name";
// Run Insert Query Here using prepared statement
if (success === TRUE)
{
    //set a key
    $key = 'product_'.$id ;
    $product = array('id' => $id, 'name' => $name);
    $memcache->set($key, $product);
}
我相信这会很好,但我的问题是,如果我没有访问$id的权限,如何使密钥唯一?因为我可以使用这个名字,但是有可能两个用户有相同的名字


我希望这是有道理的。任何帮助或指导都将不胜感激。

您必须创建一个唯一的ID

3种解决方案:

  • 使用此解决方案
  • 字符串散列(例如:md5('table_name_id:'.$id)或sha1('table_name_id:'.$id))

如果您使用MySQL为您自动生成ID(通过
AUTO_INCREMENT
列),那么为什么不向MySQL索要它提供给新行的ID呢

例如:

$result = $mysqli->query("insert into products set name='best product ever'");
if ($result === TRUE) {
    // put it into memcached
    $key = 'product_' . $mysqli->insert_id();
    $product = array('id' => $id, 'name' => $name);
    $memcache->set($key, $product);
}

啊,为什么我没有想到这个。我想我必须在mysqli数据库中存储uniqid()?因此,所有内容都是相关的。您必须为数据库的每个元素生成uniqid或uuid,并为字段编制索引。不要删除自动插入id,它总是有用的。您最终可以使用id md5($id)或字符串md5('table_name_id:'。$id')的散列生成一个密钥,这样您就可以在没有额外字段的情况下检索密钥。问题是:“如果我没有访问$id的权限,我如何使密钥唯一”我知道,但是OP提到使用MySQL
AUTO_INCREMENT
生成ID。因此,假设OP不知道
mysqli::insert_id()
方法是合理的。虽然这不是问题的字面解决方案,但我的答案为根本问题提供了另一种解决方案,即获取ID。如果OP希望自己生成ID,他可以参考您的答案。:-)