memcache由浅入深
1. memcached介绍
一套仅利用内存来进行数据缓存的软件,常用于web服务后端和数据库前端。
可临时缓存web系统查询过的数据库数据,当用户请求查询数据,优先从memcached获取数据。
memcached服务分为服务器和客户端。
2. memcached作用
1. 传统场景中,客户端查询动态数据,要从数据库中获取,但是随着并发数和访问量的增大,这样数据库的负担就会变大,并且会出现响应慢,导致访问网站慢,影响用户体验。
如果在数据库前面加一个memcached,这样会提前把数据保存到memcached中,用户访问数据的时候,会直接从memcached直接读取数据,而不是数据库,这样可以减轻数据库的负担。
3. 互联网常见内存缓存服务软件
| 软件 | 类型 | 主要作用 | 缓存的数据 |
| memcached | 纯内存型 | 后端数据库的缓存 | 缓存用户重复请求的动态内容 |
| squid,nginx | 内存缓存 | 缓存前端的服务内容 | 缓存静态数据,图片,css,js,html代码 |
| redis | 可持久化存储 | 后端数据库的缓存 | 缓存用户重复请求的动态内容 |
4. memcached的工作流程
1. 网站读取memcached数据时工作流程
1. web程序首先检查memcached是否存在数据,存在就从memcached获取数据,然后返回给客户端。
2. 如果不存在,web程序就向数据库发送请求,从数据库获取数据,并且web程序向memcached缓存一份。
3. 当有其他用户访问网站,就直接从memcached获取数据。
2. 网站更新memcached数据的工作流程
1. 当web程序更新或删除数据时,首先处理数据库中的数据。
2. 在处理数据库的数据的时候,同时会通知memcached,告诉它旧数据失效,同时把数据库更新的数据更新到memcached中。
5. 大型网站7层分层

1. 缓存和压缩,需要在nginx上配置,缓存静态资源(css,js,html,图片);压缩静态资源(html,css,js)
2. 启用nginx缓存或者使用CDN,中小公司都是使用CDN。
3. 静态层,尽可能把动态资源转化成静态资源。
4. 动态层,通过消息队列Q,生成静态页面。
5. 数据库缓存
6. 数据库层
7. 存储层
6. memcache分布式缓存
1. 使用常见的LVS和haproxy做cache的负载均衡。使用的调度算法:url hash
7. memcached服务应用优化案例
1. 用户打开网站慢,经运维人员排查看,mysql数据库负载很高,load值为20~30。
2. 登录数据库后,show full processlist;发现数据库中有大量的"like %杜冷丁%"语句。
3. 使用sphinx搜索服务实现用户搜索。
4. 在数据库前端添加memcached服务。
5. 为数据库配置读写分离。减轻主库压力。
8. memcached的特点
1. 协议简单。可以通过telnet/nc等命令直接操作memcached存取数据。
2. 支持epoll异步I/O模型,使用libevent作为事件处理通知机制。
3. 采用key/values键值数据类型。
4. 全内存缓存,效率高。
9. memcached工作原理
1. 采用C/S架构,在服务器端开启memcached守护进程,可以指定监听本地的IP地址,端口号,并发访问连接数,以及分配了多少内存来处理客户端请求。
2. Socket事件处理机制
由C语言来实现的,全部代码2000多行,采用异步epoll非阻塞网络I/O模型,基于异步的libevent事件作为事件通知机制。
3. 数据存储机制
4. 内存管理机制
slab内存管理机制,提前规划好slab,
5. 多线程处理机制
6. memcache的检测过期与删除机制
10. memcached服务安装
1. 安装libevent及连接工具nc
[root@rsync-server ~]# rpm -qa libevent libevent-devel nc 检查一下是否已经安装
[root@rsync-server ~]# yum install libevent libevent-devel nc -y 安装三个软件包
2. yum安装memcached,也可以编译安装
[root@rsync-server ~]# yum install memcached -y
wget http://memcached.org/files/memcached-1.5.8.tar.gz tar -zxvf memcached-1.x.x.tar.gz cd memcached-1.x.x ./configure && make && sudo make install
11. memcached的基本管理
1. 常用参数
-l 监听哪个IP
-p 监听哪个端口,默认11211
-c memcached最大的并发数,默认为1024
-d 以守护进程方式运行服务
-u 指定用户
-m 指定缓存数据的最大内存,默认为64MB
-P 设置保存memcached的pid文件
--v 调试信息
2. 启动memcached
memcached -p 11211 -u root -c 10240 -d
memcached -p 11212 -u root -c 10240 -d
/usr/bin/memcached -d -p 11212 -l 192.168.1.170 -u root -m 8192 -c 4096 -P /var/run/memcached.pid
启用多个memcached实例
3. 将开启的命令添加到/etc/rc.local文件中,以便下次开机可以自动启动。
echo "start memcached" >> /etc/rc.local
echo "/usr/local/bin/memcached -p 11211 -u root -c 10240 -d" >> /etc/rc.local
echo "/usr/local/bin/memcached -p 11212 -u root -c 10240 -d" >> /etc/rc.local
注意:centos7默认/etc/rc.d/rc.local没有执行权限,需要给它执行权限,才会执行上面的命令。
4. memcached启动脚本
#!/bin/sh
#
# memcached: MemCached Daemon
#
# chkconfig: - 90 25
# description: MemCached Daemon
# Source function library.
# Author: pkey san 2015/12/07
. /etc/rc.d/init.d/functions
. /etc/sysconfig/network
prog=memcached
pidfile=${PIDFILE-/var/run/memcached.pid}
start()
{
echo -n $"Starting memcached: "
daemon --pidfile=${pidfile} /usr/local/bin/memcached -u daemon -d -m 512 -l 127.0.0.1 -c 4096 -p 11211
echo `ps aux |grep memcached |grep 11211 |grep -v grep |awk '{print $2}'` >$pidfile
echo
}
stop()
{
echo -n $"Shutting down memcached: "
killproc $prog
echo
}
rh_status(){
status -p ${pidfile} $prog
}
[ -f /usr/local/bin/memcached ] || exit 0
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
rh_status
;;
restart|reload)
stop
start
;;
*)
echo $"Usage: $0 {start|stop|status|restart|reload|}"
exit 1
esac
exit 0
12. 操作memcached服务
1.

浙公网安备 33010602011771号