mysql优化
读 写 haproxy
读 比写多
a 写
b 读
b 读
b 读
web memcache
mysql(a)--------mysql(b)
web <---->memcache
| yes [返回数据]
| no或者过期
mysql 1.写入memcache 2.给用户一份
mysql写 写两份 [mysql memcache各写一份]
memcache 一个分布式的高速缓存系统 数据被缓存在内存 可以缓存[各种格式数据 图片 音视频 文件 以及 数据库检索的结果]从内存读出数据 速度比硬盘快
memcache是一个C/S结构 server----memcached client----memcache
web+memcache 250
memcached 251 -----------mysql252
memcache 缓存系统 优化mysql 为mysql作缓存
缓存mysql的查询结果 优化mysql I/O
~~~~~~~~~~~~~~~~~~~~~~
user web mysql
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
user web memcache
mysql
1) memcache的优先级大于mysql
web向数据库取数据的时候 优先去找memcache
y 拿数据
n web去找mysql
Y 去写入memcache一份 web继续处理请求
2) 为什么数据放到memcache会优化mysql I/O
内存级的缓存 可以将数据全部缓存在内存 当然也可以设置缓存为硬盘[如果要缓存的数据量不是非常大 不建义]
缓存断电后 所有缓存数据全部丢失
3)如何存储缓存数据的
将mysql的查询结果 以key = value的形式写入内存
每条数据都有自己的有效期 在有效期内 我们称之为热点数据 过期数据叫脏数据
4) memcache 内存缓存大小
32bit 2G
64bit 没限制
5) 数据缓存周期
自定义 默认情况下设为永久不过期的数据 默认也会在30天后过期
key = value
key 不得超过250 Byte [默认 128]
value 默认存储大小1M 超过1M不存储 [默认]
memcache 是一个C/S结构 server端 memcached client memcache
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
##memcached install
#libevent_install
./configure --prefix=/usr/local/libevent
make
make install
#memcached_install
cd memcached-1.4.22
./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent/
make
make install
##memcached start
/usr/local/memcached//bin/memcached -u root -p 11211 -l 192.168.18.251 -P /var/run/memcached.pid -m 128m -c 2048 -d
##验证
连接memecached 读写数据
memcached是如何保存数据的 key flags exptime byte values
#如何连接 telnet
telnet IP 11211
set get gets replace add cas appaend prepend delete stats stats items
# -m 设置内存缓存大小
-m 80% 根据数据量来设定
10m 脏数据 热点数据
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
安装客户端 memcache
phpize
./configure --enable-memcache --with-php-config=/usr/bin/php-config
make
make install
vim /etc/php.ini
extension=memcache.so ls /usr/lib64/php/modules 能看到memcache.so 命令php -m 查看php支持那些功能
###########
测试
1) 查看phpinfo.php 是否有memcache选项
2) memcache 和 memcached的连接 写一个php页面
测试页面 test_mem.php
<?php
$memcache = memcache_connect('192.168.122.183', 11211);
$memcache->set( 'test' , 'hello world!' , 0 , 12 );
$val = $memcache->get( 'test' );
echo $val;
?>
0 标志 12 过期时间
#################
上线一个实例
session cookie
cookie and cookies 一个东西
某些网站为了辨别用户的身份、进行会话跟踪而存储在用户本地终端上的数据[加密过的]
cookie 服务器保存在客户本地的一个文件 最大不能超过3K 客户端和服务器通信需要的变量
example 51cto.com 下载多个软件 ---->会员才可以下载
1) 打开51cto
2) 会员登录 -----> 当前页显示是否登录成功
3)去软件下载页面去下软件 你是什么状态 登录还是离线 http无状态协议吗 为什么是登录状态
1)登录的时候 服务器和客户端建立会话关系 服务生成cookie 并且存在客户端本地[将cookie发送给 user-agert 浏览器 浏览器将该cookie的key/value保存在某个目录下的文本文件内]
cookie 保存的是当前会话需要的变量[username password......]
2)在该会话内当你在发起向51cto的连接的时候 你的浏览器在发起连接的时候会携带自己的cookie去找服务器[51cto].
3)会话时间 默认情况下 当关闭了浏览器的时候会话就过期了 超时 会话时间可以更改 [30天内登录不需要输入帐号密码]
1)当客户端去访问服务器的时候会携带自己的COOKIE文件 ck.php
2)服务器检查cookie,提取所需要的变量 huishou.php
缺点 不安全 [要求安全的网站都不使用cookie]
session 保存在服务器上的会话文件
服务器和客户端浏览器的一次会话过程 保存了相关变量 建立session 的同时会建立相应的key
服务端将session key发送到cookie
客户端携带cookie去访问服务器 服务器能从cookie中找到session的key 从对应的session中查找需要的变量,该cookie是为服务器自动生成,他的maxage一般为-1 表示仅对当前浏览器有效,并且各浏览器之间不能共享,同一客户端如果使用两个浏览器访问服务器时,会产生两个session,
什么时候会共用session 子窗口会共享父窗口的session
浏览器窗口内的链接,脚本等打开的新窗口,这类子窗口会共享父窗口cookie,因此是共享一个session.
大量session造成服务器I/O负载
将session放到memcache
vim /etc/php.ini
session.save_handler = memcache
session.save_path = "tcp://192.168.18.251:11211"