您composer.json
应该已经ext-memcached
在其中列出,但它不会安装,如果它丢失它只会抛出一个错误。以下是获得它的各种方法:
Windows 二进制路由
截至 2018 年,AFAIK 没有适用于 PHP 7 的 JUST Memcached 的二进制 Windows 端口,但在Laragon或Winginx中有一个预打包的版本
Windows DLL 路由
有少数人在 github 上提供已编译的 DLL(64 位,并提供线程安全)
Linux 路由的 Windows 子系统
ubuntu
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt install php-memcached
如果使用它,请重新启动 php fpmsudo service php7.2-fpm restart
从源路由编译
您可以编译 php 绑定,但memcached 的 windows 包已损坏 4 年(截至 2018 年)
仅本地缓存文件 Polyfill 路由
这是一个名为 StaticCache 的 Memcached 脏包装器,您可以在紧要关头使用它从磁盘读取/写入值。它显然比 memcached 慢得多,所以它只是作为 Windows 开发的一个鞋垫。如果您喜欢,可以将其定义为同名的 polyfill
function StaticCacheClear()
{
foreach (scandir(sys_get_temp_dir()) as $file) {
if (StringBeginsWith($file, "staticcache"))
{
$path = sys_get_temp_dir() ."/". $file;
unlink($path);
}
}
global $Memcache;
if ($Memcache) $Memcache->flush();
}
// REMOVE if you don't want a global way to clear cache
if (isset($_GET['clear_static_cache'])) {
StaticCacheClear();
}
function MemcacheGet($key)
{
global $Memcache;
$value = $Memcache ? $Memcache->get($key) : (file_exists($key)?file_get_contents($key):null);
return !$Memcache? $value : (Memcached::RES_NOTFOUND === $Memcache->getResultCode() ? null : $value);
}
function StaticCacheKey($key)
{
global $Memcache;
$cacheVersion = "MY_APP_VERSION_HERE";
$uniqueKey = "staticcache_{$key}_" . date("Ymd") . "$cacheVersion.cache";
$filename = sanitize_file_name($uniqueKey);
$filename = sys_get_temp_dir() . '/' . $filename;
return $Memcache ? $uniqueKey : $filename;
}
function StaticCacheWrite($key, $value)
{
global $Memcache;
if (isset($_GET['disable-cache'])) return null;
if ($Memcache)
$Memcache->set(StaticCacheKey($key), serialize($value));
else
file_put_contents(StaticCacheKey($key), serialize($value));
}
function StaticCacheRead($key)
{
global $Memcache;
$key = StaticCacheKey($key);
$value = MemcacheGet($key);
return $value !== null ? unserialize($value) : null;
}