我想使用 PHP 7,但似乎没有 键值内存缓存 的选项。
PHP 7 是否有可用的替代品?
或者是否有一种使用 PHP7 的 Opcache 实现键值内存缓存的方法?
我想使用 PHP 7,但似乎没有 键值内存缓存 的选项。
PHP 7 是否有可用的替代品?
或者是否有一种使用 PHP7 的 Opcache 实现键值内存缓存的方法?
APCU是一个没有代码缓存的字面上的 APC (他们从APC中取出了字节码缓存的部分,发布了APCU),它是一个即插即用的替代品。与APC的用户缓存完全相同,它将数据保存在与PHP运行时相同的进程中,因此使用该值就像检索普通变量一样,速度快。
cache_get
中检查它是否过期,如果过期则删除和忽略该记录)。function cache_set($key, $val) {
$val = var_export($val, true);
// HHVM fails at __set_state, so just use object cast for now
$val = str_replace('stdClass::__set_state', '(object)', $val);
// Write to temp file first to ensure atomicity
$tmp = "/tmp/$key." . uniqid('', true) . '.tmp';
file_put_contents($tmp, '<?php $val = ' . $val . ';', LOCK_EX);
rename($tmp, "/tmp/$key");
}
function cache_get($key) {
@include "/tmp/$key";
return isset($val) ? $val : false;
}
class Cache {
private $root;
private $compile;
private $ttl;
public function __construct($options = []) {
$this->options = array_merge(
array(
'root' => sys_get_temp_dir(),
'ttl' => false,
),
$options
);
$this->root = $this->options['root'];
$this->ttl = $this->options['ttl'];
}
public function set($key, $val, $ttl = null) {
$ttl = $ttl === null ? $this->ttl : $ttl;
$file = md5($key);
$val = var_export(array(
'expiry' => $ttl ? time() + $ttl : false,
'data' => $val,
), true);
// Write to temp file first to ensure atomicity
$tmp = $this->root . '/' . $file . '.' . uniqid('', true) . '.tmp';
file_put_contents($tmp, '<?php $val = ' . $val . ';', LOCK_EX);
$dest = $this->root . '/' . $file;
rename($tmp, $dest);
opcache_invalidate($dest);
}
public function get($key) {
@include $this->root . '/' . md5($key);
// Not found
if (!isset($val)) return null;
// Found and not expired
if (!$val['expiry'] || $val['expiry'] > time()) return $val['data'];
// Expired, clean up
$this->remove($key);
}
public function remove($key) {
$dest = $this->root . '/' . md5($key);
if (@unlink($dest)) {
// Invalidate cache if successfully written
opcache_invalidate($dest);
}
}
}
已死/过时的PHP加速器列表:XCache、APC、memoize、ZendOpcache、chdb、hidef(它们不支持PHP 7)
我们可以在PECL网站上找到一份PHP加速器列表,但正如我所提到的,其中一些已经停止或不再更新。
当前正在开发的(支持PHP 7.3)有:
您可以在下载的tgz/zip文件中找到所有安装说明。
APCu WINDOWS用户: 下载与您的系统规格匹配(x64(64位)或x86(32位Windows))的APCu和APCu_bc DLL文件,选择TS或UTS版本以及正确的PHP版本。将 .DLL 粘贴到 php/ext 目录中。您可以通过查看 php 目录来确定线程模式。找到DLL文件名称(例如:php7ts.dll)。注意文件名中的TS或UTS。
php -v
将显示当前PHP CLI安装版本。
只需确保您的PHP版本与服务器上使用的版本相同即可。如果不是,请更新Windows环境路径以获取PHP。
如果有困难,请阅读以下内容:如何在Windows中安装APCu https://kapilpatel84.wordpress.com/2016/06/15/install-xdebug-apcu-on-windows-xampp-for-php7/
1)使用以下链接下载兼容的APCu http://pecl.php.net/package/apcu
2) APCu需要与APC向后兼容,因此您需要使用以下链接下载它。http://pecl.php.net/package/apcu_bc
3) 解压DDL文件并将名为php_apc.dll和php_apcu.dll的DDL文件移动到您的PHP ext目录。即C:\ xampp \ php \ ext
4) 打开php.ini文件,并将以下代码复制到文件底部
[apcu]
extension="C:\xampp\php\ext\php_apcu.dll"
apc.enabled=1
apc.shm_size=32M
apc.ttl=7200
apc.enable_cli=1
apc.serializer=php
extension="C:\xampp\php\ext\php_apc.dll"
当您解压文件时,请将DLL文件复制到PHP扩展文件夹中,例如:.../php/ext。然后在php.ini文件中进行配置(安装文本文件中包含了相关指令)。
PS. 如果您使用的是Symfony框架,请不要忘记在config>packages>cache.yaml中启用APCu。
framework:
cache:
app: cache.adapter.apcu
使用内置服务器:
php bin/console server:run