加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – memcached中的重复键

发布时间:2020-12-13 22:33:39 所属栏目:PHP教程 来源:网络整理
导读:我的php网站上的memcache有些麻烦.偶尔我会得到一个报告,该网站是行为不端的,当我看到memcache时,我发现群集中的两个服务器上都存在一些密钥.两个条目之间的数据不同(一个是较旧的). 我对memcached的理解是,这不应该发生……客户端应该散列密钥,然后总是选择
我的php网站上的memcache有些麻烦.偶尔我会得到一个报告,该网站是行为不端的,当我看到memcache时,我发现群集中的两个服务器上都存在一些密钥.两个条目之间的数据不同(一个是较旧的).

我对memcached的理解是,这不应该发生……客户端应该散列密钥,然后总是选择相同的服务器.所以要么我的理解是错的,要么是我的代码.谁能解释为什么会发生这种情况?

FWIW服务器托管在Amazon EC2上.

我通过这个函数打开了与memcache的所有连接:

$mem_servers = array(
    array('ec2-000-000-000-20.compute-1.amazonaws.com',11211,50),array('ec2-000-000-000-21.compute-1.amazonaws.com',50)
);

function ConnectMemcache()
{
     global $mem_servers;
     if ($memcon == 0) {
          $memcon = new Memcache();
          foreach($mem_servers as $server) $memcon->addServer($server[0],$server[1],true);
     }
     return($memcon);
}

和值通过以下方式存储:

function SetData($key,$data)
{
    global $mem_global_key;
    if(MEMCACHE_ON_OFF)
    {
        $key = $mem_global_key.$key;
        $memcache = ConnectMemcache();
        $memcache->set($key,$data);
        return true;
    }
    else
    {
        return false;
    }
}

解决方法

我认为这篇博文涉及到你遇到的问题.

http://www.caiapps.com/duplicate-key-problem-in-memcache-php/

从文章中可以看出发生以下情况:
– 具有密钥的memcache服务器最初退出
– 使用更新的数据在第二台服务器上重新创建密钥
– 第一台服务器重新联机并使用旧数据进入群集.
– 现在您可以将密钥保存在具有不同数据的2台服务器上

听起来您可能需要使用Memcache :: flush在写入之前清除memcache集群,以帮助最大限度地减少集群中可能存在的重复项.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读