PHP Conference Japan 2024

基本用法

示例 #1 memcache 扩展概述示例

在这个例子中,一个对象被保存到缓存中,然后被取回。对象和其他非标量类型在保存之前会被序列化,因此无法在缓存中存储资源(例如连接标识符和其他)。

<?php

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

$version = $memcache->getVersion();
echo
"Server's version: ".$version."<br/>\n";

$tmp_object = new stdClass;
$tmp_object->str_attr = 'test';
$tmp_object->int_attr = 123;

$memcache->set('key', $tmp_object, false, 10) or die ("Failed to save data at the server");
echo
"Store data in the cache (data will expire in 10 seconds)<br/>\n";

$get_result = $memcache->get('key');
echo
"Data from the cache:<br/>\n";

var_dump($get_result);

?>

示例 #2 使用 memcache 会话处理程序

<?php

$session_save_path
= "tcp://$host:$port?persistent=1&weight=2&timeout=2&retry_interval=10, ,tcp://$host:$port ";
ini_set('session.save_handler', 'memcache');
ini_set('session.save_path', $session_save_path);

?>

添加注释

用户贡献注释 2 条注释

5
atesin > gmail
4 年前
memcached 非常棒,速度极快,用途广泛且实用,可扩展性强,是许多项目的必备工具。

但如果您只想通过提高速度来最大程度地减少会话文件阻塞,还有一个不错的替代方案,即 tmpfs。

https://eddmann.com/posts/storing-php-sessions-file-caches-in-memory-using-tmpfs/

也许如果您使用的是 Debian,您的会话目录已经位于 tmp(以 tmpfs 挂载),但要注意可能导致会话混乱的每日清理进程。

如果您使用的是 CentOS/其他(像我一样),或者即使您使用的是 Debian 但想摆脱 /tmp 清理任务,也可以使用此技巧。

我发现在我的系统中 /run 也是以 tmpfs 挂载的,因此我关闭了 php-fpm,将我的 php 会话目录移动到 /tmp/,重新配置 php 并重新启动……(您可以根据自己的情况进行调整)。

systemctl stop php-fpm
cp -a /var/lib/php/session /tmp/php-session
vim /etc/php-fpm-d/www.conf
------
php_value[session.save_path] = /run/php-session
------
systemctl start php-fpm

唯一的缺点是 tmpfs 是易失性的,就像 memcached 一样(数据在卸载/关闭/断电时会丢失),为了规避此风险,我编写了另一个服务,在 php 启动/停止之前/之后恢复/备份 php 会话目录……(未经测试!)

vim /etc/systemd/system/php-session-backup.service
------
# tmpfs php 会话的基本持久性

[Unit]
Description=PHP tmpfs 会话在关闭/启动时备份/恢复
Before=php-fpm.service

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=rm -fr /run/php-session
ExecStart=cp -fa /var/lib/php/session /run/php-session
ExecStop=rm -fr /var/lib/php/session
ExecStop=cp -fa /run/php-session /var/lib/php/session

[Install]
WantedBy=multi-user.target
------
systemctl enable php-session-backup

您还可以通过每日备份任务来补充此操作,以防系统崩溃,这样您只会丢失一天的数据。

crontab -e
------
0 4 * * * rm -fr /var/lib/php/session;cp -fa /run/php-session /var/lib/php/session
------

但这非常粗略,您可以更好地使用 inotify + rsync,可以从这里获取一些想法。

https://blog.jmdawson.co.uk/persistent-ramdisk-on-debain-ubuntu/
-1
atesin > gmail
4 年前
版主请合并这些帖子。

关于 2020-07-28 01:05 做出的关于 tmpfs 会话目录的评论的勘误……

我用来安装会话文件的 tmpfs 目录是“/run”,而不是“/tmp”……因为 /tmp 有时会被自动(或手动)删除。
To Top