memcache的细节讨论
① 生命周期
从数据放入mem开始计时,直到时间到了,就销毁, 如果时间为0, 则表示不过期.
memcache的数据被销毁的情况如下:
1. 时间到
2. 重启memcached服务
3. 重启memcached服务所在的机器
4. delete / flush 销毁数据
② 如何把session数据放入到memcached服务中.
步骤:
1. 修改php.ini的配置文件
如下:
;[sesson.save_handler 有user|files|memcache]
session.save_handler = memcache
session.save_path = "tcp://127.0.0.1:11211"
③ 测试一把,重启apache
测试ok
//传统的代码
<?php
session_start();
$_SESSION['name'] = '天龙八部';
//取出
$name = $_SESSION['name'];
echo 'name= ' . $name . '<br/>';
写入到磁盘文件中:
;session.save_handler = files
; user 代表使用自定义的 session 处理器
;session.save_handler = user
;表示放入memcache
session.save_handler = memcache
; session 保存的目录
session.save_path = "tcp://127.0.0.1:11211"
思考,如果管理员,不让我们修改 php.ini 文件,我们如何处理session入memcached这个功能, 我们通过一个函数可以去修改 php.ini 的配置.
代码:
<?php
ini_set("session.save_handler","memcache");
ini_set("session.save_path","tcp://127.0.0.1:9999");
同时你也可以通过 ini_set 去动态的修改对php.ini 的其它设置 。但是他不影响其它php页面,也不会去修改php.ini 文件本身, 只对本页面生效.
mem6.php
<?php
//ini_set 只作用于本页面
ini_set('session.save_handler','memcache');
ini_set('session.save_path','tcp://127.0.0.1:11211');
//传统的代码
session_start();
$_SESSION['name'] = '天龙八部1003';
$_SESSION['city'] = 'beijing';
class Dog
{
public $name;
}
$dog1 = new Dog();
$dog1->name = 'xiao gou';
$_SESSION['dog'] = $dog1;
//取出
$name = $_SESSION['name'];
$city = $_SESSION['city'];
$dog1 = $_SESSION['dog'];
echo 'name= ' . $name . '<br/>';
echo 'city= ' . $city . '<br/>';
var_dump($dog1);
//如果 session 数据存入 mem,那么它一定是以 session_id 为 key 值进行添加
echo session_id();