1.memcached: kv结构,存储于内存之中,可减小数据库访问压力,也可做为session服务器使用
(1)常用命令
-u 指定用户 -m 指定内存大小
-d start|restart|stop -p 指定端口,默认11211
-n 最小分配空间 -f 增长因子,按最小分配空间为 基数计算,默认为1.25倍
-vv 查看具体启动过程
(2)连接memcached
telnet x.x.x.x 11211
quit 退出
查看 stats items
保存 set key flags timeout size
提取 get key
追加 append key flags timeout content_size content,例:
append magedu 0 60 4 .com
加减 incr/decr key num
清空 flush_all
(3)php连接
centos7 php-pecl-memcached
(4)php session服务器
php.ini文件
session.save_handler=memcache
session.save_path="tcp://127.0.0.1:11211?persistent=1 & weight=1 & timeout=1 & retry_interval=15"
2.varnish: 可使用内存或硬盘缓存,可用于前端静态页面图片js的缓 存服务器
(1)连接varnish
varnishadm -s /etc/varnish/secret -T 127.0.0.1:6082
vcl.list 列出配置文件,avrilable可用,active已用
vcl.show confname 查看具体配置文件
vcl.use confname使用配置文件
vcl.load confname filename 加载文件成为配置文件
backend.list
storage.list 缓存类型
(2)基础配置
/etc/varnish/default.vcl
backend default {
.host="x.x.x.x" 被监听主机的ip
.port="80"
}
/etc/varnish/varnish.params
VARNISH_LISTEN_PORT=80
VARNISH_STORAGE="file,/var/lib/varnish/varnis_storage.bin"
硬盘存储,二进制文件,不要去cat,文件可能被破坏
VARNISH_STORAGE="mallc,2048" 内存存储
(3)常用变量
bereq: 有varnish向backend主机发送http请求
bereq.http.HEADERS
bereq.url
bereq.proto 协议版本
bereq.backend
beresp:
beresp.status
beresp.backend.name
beresp.http.HEADERS
beresp.ttl 除去响应时长,剩下ttl生存时长
req: 由backend向varnish主机发送http请求
req.method 4.0请求方法
req.request 3.0请求方法
obj:
obj.hits 命中次数
obj.ttl 对象ttl
server:
server.ip
server.hostname
(4)实例
不让指定页面查缓存
sub vcl_recv {
if(req.url ~"^/test.html$"){
return(pass)
}
}
给头部增加命中提示
sub vcl_deliver {
if(obj.hits>0){
set resp.http.cache="hit"+""+server.ip
}else{
set resp.http.cache="miss"+""+server.ip
}
}
清除页面缓存3.0
sub vcl_hit {
if(req.request == "PURGE"){
purge;
error 404 "not in cache";
}
}
curl -X PURGE http://magedu/test
清除页面缓存4.0
sub vcl_recv {
if(req.method == "PURGE"){
return(purage);
}
}
sub vcl_purge {
return(synth(200,"purged"))
}
curl -X PURGE http://magedu/test
(5)动静分离
backend server1 {
...
}
backend server2 {
...
}
sub vcl_recv {
if(req.url ~ "(?i)\.php$"){
set req.backend_hint=server1;
}eles{
set req.backend_hint=server2;
}
}
(6)负载均衡
import directors;
sub vcl_init {
new bar=directors.round_robin();
bar.add_backend(server1);
bar.add_backend(server2);
}
sub vcl_recv {
set req.backend_hint=bar.backend();
}