基本用法

示例 #1 memcache 扩展概述示例

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

<?php

$memcache
= new Memcache;
$memcache->connect('localhost', 11211) or die ("无法连接");

$version = $memcache->getVersion();
echo
"服务器版本: ".$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 ("无法在服务器上保存数据");
echo
"将数据存储在缓存中(数据将在 10 秒后过期)<br/>\n";

$get_result = $memcache->get('key');
echo
"来自缓存的数据:<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);

?>

添加说明

用户贡献说明 3 条说明

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/
atesin > gmail
4 年前
版主请合并这些帖子

我于 2020-07-28 01:05 关于 tmpfs 会话目录的评论有误...

我用来安装会话文件的 tmpfs 目录是 "/run" 而不是 "/tmp"... 因为 /tmp 有时会被自动(或手动)删除
dkreuter at gmail dot com
15 年前
如果示例不起作用,请尝试将 "localhost" 更改为 "127.0.0.1"。
To Top