Codeigniter Memcached 未连接到 AWS Elasticache 实例
Codeigniter Memcached not connecting to AWS Elasticache Instance
TL;DR: 我已经设置了 AWS ElastiCache 并通过 EC2 通过 SSH 连接。但是当我尝试连接我的 Codeigniter 应用程序时(在同一个 EC2 实例中)它失败并显示它正在尝试连接到:
["localhost:11211"]
为什么?不应该是:
["****.****.sae1.cache.amazonaws.com:11211"]
所以这是背景:
我在我管理的应用程序中使用 Codeigniter 2.1.4 和 PHP 5.5,我想使用 Memcached 在 Elasticache 实例上保存一些数据。
我的应用程序在 Elastic Beanstalk 环境中 运行,Elasticache 实例与 EB 的 EC2 实例位于同一安全组中,并且我设置了打开所有 TCP 连接的规则。
Memcached 已激活,如我们所见运行 php信息:
memcached support enabled
Version 2.2.0
libmemcached version 1.0.8
SASL support yes
Session support yes
igbinary support yes
json support yes
msgpack support no
当我通过 SSH 连接到这个实例时,我可以使用 telnet 连接到 Elasticache 实例:
#telnet ****.****.sae1.cache.amazonaws.com 11211
Trying xx.xx.xx.xx...
Connected to ****.****.sae1.cache.amazonaws.com.
在我的应用程序端,我配置了 application/config/staging/memcached.php 如下:
<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
$config = array(
'default' => array(
'host' => '****.****.sae1.cache.amazonaws.com',
'port' => 11211,
'weight' => 1
)
);
在控制器上:
public function memcached(){
$this->load->driver('cache');
if($this->cache->memcached->is_supported()){
$data = $this->cache->memcached->get('foo');
if (!$data){
echo 'cache miss!<br />';
$data = 'bar';
$this->cache->memcached->save('foo',$data, 60);
}
echo $data;
echo '<pre>';
var_dump($this->cache->memcached->cache_info());
echo '</pre>';
}
}
而且输出总是说我正在尝试连接到本地主机而不是 Elasticache,为什么?这是输出:
cache miss!
bar
array(1) {
["localhost:11211"]=>
array(24) {
["pid"]=>
int(-1)
["uptime"]=>
int(0)
["threads"]=>
int(0)
["time"]=>
int(0)
["pointer_size"]=>
int(0)
["rusage_user_seconds"]=>
int(0)
["rusage_user_microseconds"]=>
int(0)
["rusage_system_seconds"]=>
int(0)
["rusage_system_microseconds"]=>
int(0)
["curr_items"]=>
int(0)
["total_items"]=>
int(0)
["limit_maxbytes"]=>
int(0)
["curr_connections"]=>
int(0)
["total_connections"]=>
int(0)
["connection_structures"]=>
int(0)
["bytes"]=>
int(0)
["cmd_get"]=>
int(0)
["cmd_set"]=>
int(0)
["get_hits"]=>
int(0)
["get_misses"]=>
int(0)
["evictions"]=>
int(0)
["bytes_read"]=>
int(0)
["bytes_written"]=>
int(0)
["version"]=>
string(0) ""
}
}
对不起,各位老问题。但如果对此有任何想法,我将不胜感激。
干杯。
尝试修改您的 memcached.php
文件,例如:
$config['memcached'] = array(
'hostname' => '****.****.sae1.cache.amazonaws.com',
'port' => 11211,
'weight' => 1
);
在你的 memcached
函数上:
$this->load->driver('cache', array('adapter' => 'memcached', 'backup' => 'dummy'));
TL;DR: 我已经设置了 AWS ElastiCache 并通过 EC2 通过 SSH 连接。但是当我尝试连接我的 Codeigniter 应用程序时(在同一个 EC2 实例中)它失败并显示它正在尝试连接到:
["localhost:11211"]
为什么?不应该是:
["****.****.sae1.cache.amazonaws.com:11211"]
所以这是背景:
我在我管理的应用程序中使用 Codeigniter 2.1.4 和 PHP 5.5,我想使用 Memcached 在 Elasticache 实例上保存一些数据。
我的应用程序在 Elastic Beanstalk 环境中 运行,Elasticache 实例与 EB 的 EC2 实例位于同一安全组中,并且我设置了打开所有 TCP 连接的规则。
Memcached 已激活,如我们所见运行 php信息:
memcached support enabled
Version 2.2.0
libmemcached version 1.0.8
SASL support yes
Session support yes
igbinary support yes
json support yes
msgpack support no
当我通过 SSH 连接到这个实例时,我可以使用 telnet 连接到 Elasticache 实例:
#telnet ****.****.sae1.cache.amazonaws.com 11211
Trying xx.xx.xx.xx...
Connected to ****.****.sae1.cache.amazonaws.com.
在我的应用程序端,我配置了 application/config/staging/memcached.php 如下:
<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
$config = array(
'default' => array(
'host' => '****.****.sae1.cache.amazonaws.com',
'port' => 11211,
'weight' => 1
)
);
在控制器上:
public function memcached(){
$this->load->driver('cache');
if($this->cache->memcached->is_supported()){
$data = $this->cache->memcached->get('foo');
if (!$data){
echo 'cache miss!<br />';
$data = 'bar';
$this->cache->memcached->save('foo',$data, 60);
}
echo $data;
echo '<pre>';
var_dump($this->cache->memcached->cache_info());
echo '</pre>';
}
}
而且输出总是说我正在尝试连接到本地主机而不是 Elasticache,为什么?这是输出:
cache miss!
bar
array(1) {
["localhost:11211"]=>
array(24) {
["pid"]=>
int(-1)
["uptime"]=>
int(0)
["threads"]=>
int(0)
["time"]=>
int(0)
["pointer_size"]=>
int(0)
["rusage_user_seconds"]=>
int(0)
["rusage_user_microseconds"]=>
int(0)
["rusage_system_seconds"]=>
int(0)
["rusage_system_microseconds"]=>
int(0)
["curr_items"]=>
int(0)
["total_items"]=>
int(0)
["limit_maxbytes"]=>
int(0)
["curr_connections"]=>
int(0)
["total_connections"]=>
int(0)
["connection_structures"]=>
int(0)
["bytes"]=>
int(0)
["cmd_get"]=>
int(0)
["cmd_set"]=>
int(0)
["get_hits"]=>
int(0)
["get_misses"]=>
int(0)
["evictions"]=>
int(0)
["bytes_read"]=>
int(0)
["bytes_written"]=>
int(0)
["version"]=>
string(0) ""
}
}
对不起,各位老问题。但如果对此有任何想法,我将不胜感激。
干杯。
尝试修改您的 memcached.php
文件,例如:
$config['memcached'] = array(
'hostname' => '****.****.sae1.cache.amazonaws.com',
'port' => 11211,
'weight' => 1
);
在你的 memcached
函数上:
$this->load->driver('cache', array('adapter' => 'memcached', 'backup' => 'dummy'));