memcahe

网站的瓶颈 主要集中在数据库 ,用缓存(直接操作内存)

存储计算机的内存,如果一旦服务器断电,数据都将清空

内存:memcached redis
基于文档:mongodb

memcache:基于内存的高性能的分布式的内存管理系统(C语言,PHP的一个扩展)
键值对的存储

使用memcache的客户端:PHP

1.安装memcache的服务器端 cmd
1.1 进入到memcached.exe的目录
1.2 memcached.exe -d install 安装
1.3 memcached.exe -d start 启动

memcached.exe -d stop:关闭
memcached.exe -d uninstall:卸载

netstat:显示协议统计和当前 TCP/IP 网络连接。
netstat -a 显示所有连接和侦听端口。 memcache默认的端口号为11211

2.客户端连接memcache(telnet localhost 11211)
stats:查看memcache运行状态信息
set 键 标识符 有效期 长度(只能存储字符串)
set name 1 0(永久) 10(存储的值必须是10个长度)
zhangsan
get 键
delete 键
flush_all :清空所有数据
stats cachedump 1 0:打印所有的数据

3.PHP连接memcache
1.将php_memcache.dll放在php目录下的ext目录下
2.在php.ini配置文件中, 确保安装PHP与memcache的扩展 extension = php_memcache.dll
3.重启apache,确认memcache扩展成功安装

memcache::addServer('localhost',11211)
memcache::set(key,value,MEMCACHE_COMPRESSED,有效期)
memcache::get(key)
memcache::delete(key)
memcache::flush():

高级session
baidu.com
tieba.baidu.com
music.baidu.com
sex.baidu.com


// 必须确保能够连接成功
session.save_handler = memcache
session.save_path = 'tcp://192.168.129.30:11211'

<?php 

// 1.实例化Memcache类    memcache
$mem = new Memcache;

// 2.配置memcache
$mem->addServer('localhost',11211);

// 3.向内存中添加数据(四种标量,数组,对象,是将这些数据类型转化为字符串进行存储)
$mem->set('username','zhangsan');
$mem->set('age',20);
$mem->set('price',20.99);
$mem->set('bool',true);

$mem->set('info',['username'=>'lisi','age'=>20,'sex'=>'男']);

class Person
{
    public $name = 'wangwu';
    public $age = 20;
    public $sex = 1;
}
$mem->set('person',new Person);


// set(键,值,指定压缩,设置有效期)
$mem->set('weight','100KG',MEMCACHE_COMPRESSED,10);
<?php 
// 1.先实例化memcache
$mem = new Memcache;
$mem->addServer('localhost',11211);

// 2.判断内存中存在对应的数据信息

// 将sql语句单独提取并加密取6位出来作为存入数据的键值
$sql = 'select * from demo_user';
$key = substr(md5($sql),0,6);
echo $key;
$data = $mem->get($key);

if ($data) {
    echo 'memcache服务器中有对应的数据信息';
} else {
    /*
        一个小时改变一次内容,将此内容缓存一个小时

        在一个小时内,从计算机的缓存中读取数据,
        如果过期,从数据库读取,同时向缓存中再存入一份数据,在保存10s中
    */
    try
    {
        $pdo = new PDO('mysql:host=localhost;dbname=lamp129;charset=utf8','root','');
    } catch (PDOException $p) {
        echo $p->getMessage();
    }

    $stmt = $pdo->query($sql);
    $data = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // 将查询到的数据向memcache中写入
    $mem->set($key,$data,MEMCACHE_COMPRESSED,100);

    echo '这是从数据库读取到的信息';
}
<?php 

// 分布式缓存
$mem = new Memcache;

// 连接多台memcache服务器
$mem->addServer('localhost',11211);
$mem->addServer('192.168.129.67',11211);
$mem->addServer('192.168.129.32',11211);

for ($i=0;$i<100;$i++) {
    $mem->set("user{$i}",'zhangsan');
}

var_dump($mem->get('user10'));

当网站越来越大存储用户或者订单等session信息分布在不同的服务器上怎么办?www.tieba.baidu.com   www.music.baidu.com  www.baidu.com

session跨域共享问题:将上述的服务器都装上memcache可以用将session数据存入memcache而不存入文件了

找到php.ini   

session_save_handler=files   默认

改为session_save_handler=memcache

session.save_path='c:xampp mp'

改为 session.save_path='tcp://localhost:11211'

原文地址:https://www.cnblogs.com/lichihua/p/9538134.html