当前位置: 首页 > 面试题库 >

用于PHP的内存缓存-无法连接

计弘
2023-03-14
问题内容

我正在运行centos 6.使用apache处理php和nginx来处理脚本图像和CSS。

我已经安装了memcached服务器。

PORT="11211"
USER="memcached"
MAXCONN="4096"
CACHESIZE="512"
OPTIONS="-l 127.0.0.1"

我还为php安装了模块。

我创建了一个新的php文件

 $memcache = new Memcache;
 $memcache->connect('127.0.0.1', 11211) or die ("Could not connect");

我检查了memcached状态,它正在运行。
我总是收到“无法连接”。
我试图将值从‘127.0.0.1’更改为’localhost’-仍然无法正常工作。

$memcache = new Memcache();
$memcache->addServer('127.0.0.1', 11211) or die ("Could not connect");
var_dump($memcache->getExtendedStats());
$memcache->set('key', 'hello world', false, 60);
echo $memcache->get('key');
//$memcache->connect('127.0.0.1', 11211) or die ("Could not connect");

输出量

array(1){[“” 127.0.0.1:11211“] => bool(false)}

connect和addServer有什么不同?最好的方法是什么?
但我没有得到Hello World

有关代码和此问题的更多更新。

phpinfo 显示memcached。
var_dump($ memcache-> get(’key’)); 给

布尔值(false)

为什么我应该使用 addServer 而不是 connect

有关代码的更多更新

$memcache = new Memcache;
$memcache->addServer('localhost', 11211);
echo $memcache->getServerStatus('localhost', 11211);
output : 1

//$memcache->set('key', 'hello world') or die("failed to store data");
output : failed to store data

更多细节

getsebool httpd_can_network_memcache

返回 关闭

它应该继续吗?

注意:Memcache :: connect():服务器127.0.0.1(tcp 11211,udp 0)失败,原因:权限被拒绝(13)

问题答案:

从注释中可以看出,您正在运行增强了安全性的Linux(SELinux),它在内核级别增加了一层额外的安全性。根据我的经验和用法,我发现SELinux在某些服务周围添加了一个力场,因此它们无法访问系统上的特定资产。例如,如果我要从提供HTML内容/home/src/web,则必须告诉系统httpd服务可以访问/home/src/web路径中的内容。为此,我将发出以下命令:

$ -> setsebool -P httpd_enable_homedirs 1

基本上,要允许服务之间的交叉通信,您必须允许通过策略进行此类访问,就像对防火墙“钉孔”以允许访问特定端口一样,除非使用SELinux,否则您不授予对端口的访问权限,而是授予对系统或服务另一部分的访问权限。对我们来说幸运的是,有一些内置策略可以使用上述setsebool构造,而不是尝试定义自己的策略,这很痛苦。有关SELinux的更完整说明,请查看Wikipedia页面。

现在回答您的特定问题:

为什么我应该使用addServer而不是connect?

addserver()将允许您将多个ip(或主机名)添加到假定存在缓存值的列表(即内存缓存服务器池)中。而connect()只能允许您连接到单个指定的服务器。

getsebool httpd_can_network_memcache,它关闭了,应该重新打开吗?

是的,打开此特定设置似乎可以使您连接到启用了SELinux的内存缓存服务器,但是,在我的生产服务器上,我仍然将其设置为off,但具有以下设置:

$ -> setsebool -P httpd_can_network_connect 1

我相信,任何一种设置都可以达到目的,但是通过上述设置,如果您在另一台主机上具有Memcache服务器,httpd仍然可以访问它。

这是关于完善SELinux 的不错的文章,以允许httpd服务访问其他服务。



 类似资料:
  • 本文向大家介绍PHP基于文件存储实现缓存的方法,包括了PHP基于文件存储实现缓存的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP基于文件存储实现缓存的方法。分享给大家供大家参考。具体如下: 在一些数据库数据记录较大,但是服务器有限的时候,可能一条MySQL查询就会好几百毫秒,一个简单的页面一般也有十几条查询,这个时候也个页面加载下来基本要好几秒了,如果并发量高的话服务器基本就瘫

  • 本文向大家介绍PHP内存缓存功能memcached示例,包括了PHP内存缓存功能memcached示例的使用技巧和注意事项,需要的朋友参考一下 下文简单介绍了memcached类的应用示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。 一、memcached 简介 在很多场合,我们都会听到 memcached 这个名字,但很多同学只是听过,并没有用过或实际了解过,只知道它是一个很不错的东东。

  • 是否有可能在内存中实现缓存以避免完全堆消耗? 我的spring boot java应用程序使用内存缓存,过期策略设置为1小时(咖啡因库用于缓存目的)。在此之后,所有缓存实例都处于旧代,需要收集完整的GC。现在,当XMX设置为10GB时,我可以看到经过几个小时的测试,我的缓存包含大约100k个实例,但在heap中(正好是旧一代),我可以找到数百万个缓存对象的实例。是否有可能在内存中使用缓存并避免这种

  • 我正在使用Spring缓存框架和Redis。下面是我使用的缓存 我只是想创造一把我知道的钥匙。这会产生错误 因为当我不指定键为flows时。 这里出了什么问题。

  • 我在本地主机上的一个项目中遇到了一个问题,我无法增加PHP内存限制设置。 我已经尝试在php.ini配置中直接增加它: 我尝试在project. htaccess文件中增加它: 我尝试过在PHP控制器的函数中直接增加它:

  • 问题内容: 我还没有使用过Redis,但我听说过它,并打算尝试将其作为缓存存储。 我听说Redis使用内存作为缓存存储数据库,那么如果我使用变量作为对象或字典数据类型来存储数据有什么区别?喜欢: Redis有什么优势? 问题答案: Redis是一个 远程 数据结构服务器。这肯定比仅将数据存储在本地内存中要慢(因为它涉及套接字往返来获取/存储数据)。但是,它也带来了一些有趣的属性: 应用程序的所有进