缓存中间件Memcached

目录

一、大型网站优化

1、网站访问流程

2、如何优化

3、统计访问量

memcached介绍和安装启动

1、介绍

2、安装启动软件

3、memcached使用

1、命令行连接和操作

1.1、telnet连接使用

1.2、存储命令

1.3、删除命令

1.4、查找和计算命令

1.5、统计状态命令

2、memcached_tool.php工具


一、大型网站优化

1、网站访问流程

随着网站迭代开发,访问会变慢
LNMP 架构中网站应用访问流程
浏览器 =>web 服务器 => 后端服务(中间件 )=> 数据库( mysql
访问流程越多,访问速度和出现问题的几率也越大
优化访问速度,就需要减少访问步骤或者提高单步骤的速度

2、如何优化

根据网页的访问流程,可以进行以下优化:
①提高 web 服务器并发 负载均衡(多台服务器架构)
②页面静态化 把经常访问,但是数据不经常发生变动的动态页面,制作为静态页面
③内存缓存优化 把经常访问的数据,加载到内存中使用
④数据库优化 很多时候,还需要取数据库信息,所以优化数据库本身

3、统计访问量

户数量: 10000-12000 (户量猛增)
PV 100000-500000 (24时访问次数总和)
QPS 50-100* (每秒访问次数)
DAU 2000(每日活跃户数)
随着业务量增加,访问量越来越大,用户在访问某些页面数据时,通过慢查询日志发现慢查询 SQL ,经 过优化之后效果还是不够明显。而此类数据发生变动的频率又较小,故提出使用缓存中间件(一般会将数据存储到内存中)的方式,降低MySQL 的读压力,提高整个业务架构集群的稳定和快速响应能力

memcached介绍和安装启动

1、介绍

memory cache cache in memory 缓存放入内存中
Memcached 是国外社区网站 LiveJournal 的开发团队开发的 高性能的分布式内存缓存服务器。一般的 使用目的是通过缓存数据库查询结果,减少数据库访问次数,以提高动态 Web 应用的速度、提高访问效率

2、安装启动软件

官方网址 http://memcached.org/
①上传软件到服务器
软件包名称 memcached-1.5.8.tar.gz
②解压并编译安装
#memcache依赖libevent 安装libevent-devel解决
[root@localhost ~]# yum -y install libevent-devel
#编译安装memcached
[root@localhost ~]# tar xvf memcached-1.5.8.tar.gz
[root@localhost ~]# cd memcached-1.5.8
[root@localhost ~]# ./configure --prefix=/usr/local/memcached
[root@localhost ~]# make && make install
③查看软件启动参数,并启动
[root@localhost ~]# cd /usr/local/memcached/bin
[root@localhost ~]# ./memcached -h
#常用参数
-p是设置Memcache监听的端口,最好是1024以上的端口;
-d是启动一个守护进程;
-m是分配给Memcache使用的内存数量,单位是MB
-u是运行Memcache的用户;
-l是监听的服务器IP地址,可以有多个地址;
-c是最大运行的并发连接数,默认是1024
-P是设置保存Memcachepid文件
启动 memcached
#进入memcached文件目录
[root@localhost ~]# cd /usr/local/memcached/bin
#后台启动memcached 可以创建一个普通用户(memcached) 用来启动管理memcached软件
[root@localhost ~]# ./memcached -uroot -d
#进程查看是否启动成功
[root@localhost ~]# ps aux |grep memcached

3、memcached使用

1、命令行连接和操作

1.1telnet连接使用
memcached 默认使用启动服务占用 tcp 11211 端口。可以通过 telnet 进行连接使用
#安装telnet客户端
[root@localhost ~]# yum -y install telnet
#通过telnet连接11211端口
[root@localhost bin]# telnet 192.168.136.212 11211
1.2、存储命令
语法: set
set 命令用于将 value( 数据值 ) 存储在指定的 key( )
如果 set key 已经存在,该命令可以更新该 key 所对应的原来的数据,也就是实现更新的作用
#语法
set key flag exptime bytes
value
#flag服务端提供的一个标识,默认没什么意义,默认可以传个0,这个标识是为了编程语言一个状态,例
:flag0,1) 代表是否采用压缩机制 0代表不压缩,1代表压缩
#exptime过期时间,0代表不过期
#bytes字节
#value
#举例
set name 0 0 8
zhangsan
#查看
get name
语法: add
add 命令用于将 value( 数据值 ) 存储在指定的 key( )
如果 add key 已经存在,则不会更新数据 ( 过期的 key 会更新 ) ,之前的值将仍然保持相同,并且您将
获得响应 NOT_STORED
#举例
add age 0 0 2
18
语法: replace
replace 命令用于替换已存在的 key( ) value( 数据值 )
如果 key 不存在,则替换失败,并且您将获得响应 NOT_STORED
#举例
replace name 0 0 3
yun
语法: append
append 命令用于向已存在 key( ) value( 数据值 ) 后面追加数据
#查看
get name
VALUE name 0 3
yun
#追加
append name 0 0 6
haochi
#查看
get name
VALUE name 0 9
yunhaochi
语法: prepend
prepend 命令用于向已存在 key( ) value( 数据值 ) 前面追加数据
#举例
prepend name 0 0 1
a
1.3、删除命令
语法: delete
delete 命令用于删除已存在的 key( )
#语法
delete key
语法: flush_all
flush_all 命令用于清理缓存中的所有 key=>value( => )
该命令提供了一个可选参数 time ,用于在制定的时间后执行清理缓存操作
#语法
flush_all [time]
1.4、查找和计算命令
语法: get
get 命令获取存储在 key( ) 中的 value( 数据值 ) ,如果 key 不存在,则返回空
#语法
get key1 key2 key3
语法: incr( 相加 )/decr (相减)
incr decr 命令用于对已存在的 key( ) 的数字值进行自增或自减操作
incr decr 命令操作的数据必须是十进制的 32 位无符号整数(无负数)
#语法
incr key value
decr key value
1.5、统计状态命令
语法: stats
stats 命令用于返回统计信息例如 PID( 进程号 ) 、版本号、连接数等
stats 的参数参考
pid: memcache服务器进程ID
uptime:服务器已运行秒数
time:服务器当前Unix时间戳
version:memcache版本
pointer_size:操作系统指针大小
rusage_user:进程累计用户时间
rusage_system:进程累计系统时间
curr_connections:当前连接数量
total_connections:Memcached运行以来连接总数
connection_structures:Memcached分配的连接结构数量
cmd_get:get命令请求次数
cmd_set:set命令请求次数
cmd_flush:flush命令请求次数
get_hits:get命令命中次数
get_misses:get命令未命中次数
delete_misses:delete命令未命中次数
delete_hits:delete命令命中次数
incr_misses:incr命令未命中次数
incr_hits:incr命令命中次数
decr_misses:decr命令未命中次数
decr_hits:decr命令命中次数
cas_misses:cas命令未命中次数
cas_hits:cas命令命中次数
cas_badval:使用擦拭次数
auth_cmds:认证命令处理的次数
auth_errors:认证失败数目
bytes_read:读取总字节数
bytes_written:发送总字节数
limit_maxbytes:分配的内存总大小(字节)
accepting_conns:服务器是否达到过最大连接(0/1)
listen_disabled_num:失效的监听数
threads:当前线程数
conn_yields:连接操作主动放弃数目
bytes:当前存储占用的字节数
curr_items:当前存储的数据总数
total_items:启动以来存储的数据总数
evictions:LRU释放的对象数目
reclaimed:已过期的数据条目来存储新数据的数目
缓存命中率 :命中数( get 获取到数据) / 获取次数( get 的次数)
get_hits/cmd_get , 如果命中率低,业务代码缓存有问题,命中率为 0 ,缓存没有起作用
== 缓存穿透 ==
访问的数据,数据库不存在的数据,每次都不能够生成缓存,每次请求都直接访问数据库,穿透了
缓存,缓存没有起到作用。数据库压力没有得到缓解。
解决方案,数据库查不到的,也做一个空缓存。
== 缓存雪崩 ==
缓存具有失效时间,如果缓存失效时间都是一样,本来应该请求缓存的,但是因为缓存失效了,全
部请求到了数据库,数据库压力剧增,可能会造成数据库宕机,进而造成系统崩溃。
解决方案,设置缓存的失效时间均匀分布

2memcached_tool.php工具

查看 memcached 运行状态、 key(item) 的数量了、内存使用量等,需要 php 的运行环境
①上传 memcached_tool.php web 服务器
上传到虚拟机主机可以访问的目录即可。
②修改连接参数
[root@localhost ~]# vim memcached_tool.php
#修改内容:
define('ADMIN_USERNAME','root'); // Admin Username
define('ADMIN_PASSWORD','123456'); // Admin Password
$MEMCACHE_SERVERS[] = '192.168.136.212:11211'; // memcacched server ip
③查看使用
http://192.168.136.212/memcached_tool.php
  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值