网站的瓶颈 主要集中在数据库 ,用缓存(直接操作内存)
存储计算机的内存,如果一旦服务器断电,数据都将清空
内存: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\tmp'
改为 session.save_path='tcp://localhost:11211'