php prettyprint-override">class Cache {
protected $memcached;
public function __construct($cache_name) {
$instance_name = 'persistent-' . $cache_name;
$this->memcached = new Memcached($instance_name);
$server_count = count($this->memcached->getServerList());
echo '[MC] Server count of ', $instance_name, ': ', $server_count, PHP_EOL;
if (0 == $server_count) {
$servers = array(array("localhost","16586"),array("localhost","16587"));
echo '[MC] Adding servers: ', json_encode($servers), PHP_EOL;
// options don't change anything in my case
$this->memcached->setOptions(array(
Memcached::OPT_DISTRIBUTION => Memcached::DISTRIBUTION_CONSISTENT,
Memcached::OPT_LIBKETAMA_COMPATIBLE => true
));
$this->memcached->addServers($servers);
}
$stats = $this->memcached->getStats();
foreach($stats as $server => $data){
echo '[MC] Stats of ', $server, ' curr_connections: ', $data['curr_connections'], ' total_connections: ', $data['total_connections'], PHP_EOL;
}
}
public function get($key) {
echo '[MC] Server for key: ', $key, ' is ', json_encode($this->memcached->getServerByKey($key)), PHP_EOL;
$ret = $this->memcached->get($key);
echo '[MC] Getting ', $key, ' with result: ', $ret, PHP_EOL;
return $ret;
}
public function set($key, $data, $timeout = 0) {
echo '[MC] Set of ', $key, ' with data: ', $data, PHP_EOL;
return $this->memcached->set($key, $data, $timeout);
}
}
$cache = new Cache('instance');
$ret = $cache->get('something');
if(empty($ret)) {
$cache->set('something', true);
}
我期望从这段代码中得到的是在建立连接后运行单个addservers
。
新鲜运行(在memcached/apache重新启动之后)显示:
// first run
[MC] Server count of persistent-instance: 0
[MC] Adding servers: [["localhost","16586"],["localhost","16587"]]
[MC] Stats of localhost:16586 curr_connections: 5 total_connections: 6
[MC] Stats of localhost:16587 curr_connections: 5 total_connections: 6
[MC] Server for key: something is {"host":"localhost","port":16587,"weight":1}
[MC] Getting something with result:
[MC] Set of something with data: 1
// second
[MC] Server count of persistent-instance: 0
[MC] Adding servers: [["localhost","16586"],["localhost","16587"]]
[MC] Stats of localhost:16586 curr_connections: 6 total_connections: 7
[MC] Stats of localhost:16587 curr_connections: 6 total_connections: 7
[MC] Server for key: something is {"host":"localhost","port":16587,"weight":1}
[MC] Getting something with result: 1
// up to 6th call curr_connections are growing and still adding servers to pool
[MC] Server count of persistent-instance: 0
[MC] Adding servers: [["localhost","16586"],["localhost","16587"]]
[MC] Stats of localhost:16586 curr_connections: 10 total_connections: 11
[MC] Stats of localhost:16587 curr_connections: 10 total_connections: 11
[MC] Server for key: something is {"host":"localhost","port":16587,"weight":1}
[MC] Getting something with result: 1
// 7th+ call finally with expected result
[MC] Server count of persistent-instance: 2
[MC] Stats of localhost:16586 curr_connections: 10 total_connections: 11
[MC] Stats of localhost:16587 curr_connections: 10 total_connections: 11
[MC] Server for key: something is {"host":"localhost","port":16587,"weight":1}
[MC] Getting something with result: 1
我是不是漏掉了什么?出什么事了?
此问题在我的最新配置中仍然存在:
我不知道你的“问题”是什么。您的每个Apache PHP“服务器”(即子服务器)在启动时还没有连接到memcache--因此每个服务器都需要初始化连接--它们都需要...一次。
现在每个工作者都有一个服务器列表。
如果您要查询它第二次-您将“看到”服务器列表…但您有一个缓存对象,我假设您只实例化一次。所以你永远不会再调用它,所以它永远不会再尝试调用getServers...所以您永远不会看到“这里是服务器列表”。
我说对了吗?
如果是这样,那就是关于“单身人士”的常见问题/误解之一。关于单身,你总是需要问的最重要的问题是“他们有多少”--因为他们只是在自己控制的上下文中“单身”....但在这种情况下,其他外部因素可能会造成更多的影响。在本例中,每个PHP实例有一个....但是您的apache创建了多个PHP实例--因此每个实例都有一个--并且这些实例不共享任何东西,因此每个实例都需要自己的全局、自己的到数据库的持久连接、到memcache的持久连接等等。
很高兴被纠正。
主要内容:PHP 连接 Memcached在前面章节中我们已经介绍了如何安装 Memcached 服务,接下来我们为大家介绍 PHP 如何使用 Memcached 服务。 PHP Memcache 扩展安装 PHP Memcache 扩展包下载地址:http://pecl.php.net/package/memcache,你可以下载最新稳定包(stable)。 注意:/usr/local/php/ 为php的安装路径,需要根据你安装的实际
我使用了不同的memcached库和插件版本,以实现PHP memcache客户端和memcached服务器之间的真正持久性。 问题是仍然会打开和关闭连接,这样连接计数器就会上升,而不是重用现有的持久连接。 我们希望在一个具有大量输入连接的高性能环境中使用memcache,而当前的连接数量确实会杀死apache childs。有什么想法可以实现真正的持久性吗? 使用过的软件: Red Hat En
我能知道Hazelcast支持磁盘持久性吗?换句话说,我可以使用Hazelcast作为常规数据库吗?(就像apache点火一样)。
问题内容: 我正在尝试Go-并希望创建一个可以远程登录,发送命令和接收响应的TCP服务器。 上面的代码片段每次都会关闭连接,将我踢出终端会话。但是我真正想要的是能够保持连接打开以进行更多的I / O操作。如果我只是删除,则服务器似乎挂在某处,因为它不再获得任何响应。 我解决此问题的方法是让我的handleRequest方法无休止地循环,以便它在收到消息之前永远不会退出。这是否合适- 还是有更好的实
问题内容: 我想在我们的其中一台Web服务器上进行一些性能测试,以了解服务器如何处理大量持久连接。不幸的是,我对HTTP和Web测试不是很熟悉。这是到目前为止我已经获得的Python代码: 我的主要问题是: 如何保持这些连接的生命? 我设置了很长的超时时间,但这是一种非常粗糙的方法,我甚至不确定它是否会影响连接。是否只是偶尔偶尔请求一两个字节? (此外,与我代码末尾的丑陋块相比,还有一个更好的过程
我是微服务架构的初学者,我在很多博客中读到过,在微服务架构中,每个微服务都必须有自己的数据库。在我的情况下,它可能花费非常昂贵。 我的问题是,有没有可能使持久层本身成为微服务?这将具有允许其他微服务对数据库具有读/写访问权限的功能。谢谢