windows 10上的Memcache PHP扩展间歇性工作
我在apache/php windows 10上有memcache扩展(详细信息见末尾) 创建了一个简单的测试:windows 10上的Memcache PHP扩展间歇性工作,php,apache,xampp,php-extension,libmemcache,Php,Apache,Xampp,Php Extension,Libmemcache,我在apache/php windows 10上有memcache扩展(详细信息见末尾) 创建了一个简单的测试: $memcache = new Memcache; $memcache->addServer("ext-memcached.e-memcached.xxx.net",11211); $memcache->addServer("ext-memcached.e-memcached2.xxx.net",11211); $memcache->addServer("ext-m
$memcache = new Memcache;
$memcache->addServer("ext-memcached.e-memcached.xxx.net",11211);
$memcache->addServer("ext-memcached.e-memcached2.xxx.net",11211);
$memcache->addServer("ext-memcached.e-memcached3.xxx.net",11211);
$key='xxx_54921';
$settings = $memcache->get($key);
print_r ($settings);
memcache服务器位于AWS上,运行良好(生产服务器)。
此测试代码有效-它从memcache服务器检索值。
但是,如果我等待几分钟并刷新它,它将不会返回值。
然后,如果我再次刷新,它将返回值
相同的代码/配置在另一台开发人员计算机上工作
这是什么原因造成的
Config:
PHP Version 5.6.34
Windows NT SPECTRE 6.2 build 9200 (Windows 8 Home Premium Edition) i586
Build Date Feb 28 2018 17:45:55
Compiler MSVC11 (Visual C++ 2012)
Architecture x86
Memcache extension:
ts x86 version from here:
https://windows.php.net/downloads/pecl/releases/memcache/3.0.8/
memcache info:
memcache support enabled
Version 3.0.8
Revision $Revision: 329835 $
Directive Local Value Master Value
memcache.allow_failover 1 1
memcache.chunk_size 32768 32768
memcache.compress_threshold 20000 20000
memcache.default_port 11211 11211
memcache.hash_function crc32 crc32
memcache.hash_strategy standard standard
memcache.lock_timeout 600 600
memcache.max_failover_attempts 20 20
memcache.protocol ascii ascii
memcache.redundancy 1 1
memcache.session_redundancy 2 2
检查你的
memcache.redundancy
设置时,您的数据在每个memcached节点上都不可用。在您的示例中,将其设置为3就足够了。memcached服务实际上并没有为您安装PHP memcached扩展。它只安装用于存储缓存的memcached服务器 您需要首先从PECL存储库下载Windows DLL(单击蓝色的Windows DLL链接)。然后必须将extension=php_memcache.dll行添加到SAPI的正确php.ini文件中。另外,请注意,扩展DLL文件需要放置在XAMPP安装的正确路径中 对于Apache,只需在文档根目录中创建一个脚本 对于CLI SAPI,您可以使用php.exe--ini执行相同的操作。同样,如果XAMPP包修改了您的配置路径(因为这是一个编译时指令),那么您可能需要依赖它 在对php.ini进行更改后,需要重新启动php才能使更改生效 你可以参考:
由于您在Windows上使用的是PHP7,因此可能还需要注意的是,PECL编译的DLL实际上可能无法在apache for Windows下工作,因为您很可能使用的是一个加密的SAPI。因此,请确保您正在下载正确的版本。据我所知,该版本的编译只适用于高达PHP5.6的版本。注释中提到的用于PHP7的github替代方案在非线程安全环境下进行测试。因此,您可能只能在Windows上对CLI脚本执行此操作。问题似乎更多地在于您编写(
set
)和获取(get
)具有多个节点的数据的方式。-Memcache不支持复制
尝试单个节点,在这种情况下,您应该可以在设置后立即获取数据
当具有多个节点“”是存储数据的常用方法时,这意味着实施了一个逻辑,以确定用于写入或获取数据的服务器:
发件人:
客户端使用客户端库联系服务器,默认情况下,服务器在端口11211公开其服务。TCP和UDP都受支持。每个客户端都知道所有服务器;服务器之间不通信。如果客户机希望设置或读取与某个键对应的值,则客户机的库首先计算该键的散列,以确定要使用哪个服务器。这提供了一种简单的分片形式和跨服务器的可扩展无共享体系结构
因此,在PHP客户端中,您可以尝试一致的哈希:
$memcache = new Memcache;
$memcache->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE, true);
发件人:
此外,请尝试:
memcache.hash_strategy = consistent;
查看此帖子了解更多详细信息:
答案是:与其他dev计算机有什么不同吗?php版本,memcache信息,memcache版本,…?你能试试$stats=$memcache->getExtendedStats()吗;打印(统计数据);在添加服务器之后?另外,在$memcache->get之前,您可以放置一个“sleep(2);”,它可能是当您尝试获取缓存未命中的密钥和结果时,memcache库中服务器的“内部计数”尚未更新。我不想冗余问题说memcache服务器在aws上。
memcache.hash_strategy = consistent;