网站首页 > 技术文章 正文
memcached/memcache基础
如果对运维课程感兴趣,可以在b站上搜索我的账号: 运维实战课程,可以关注我,学习更多免费的运维实战技术视频
1 memcached简介
是一套数据缓存系统或软件,用于在动态系统中缓存数据库数据,减少数据库的访问压力,达到提升网站系统性能的目的。在企业中应用场景中一般用来作为数据库的cache服务使用,memcached是通过预分配指定的内存空间来存取数据的,因此它比数据库直接操作磁盘要快的多,可以提供比直接读取数据库更好的性能。
软件 | 作用 | 缓存的数据 |
Memcached,redis | 后端数据库的缓存 | 动态的数据,如:博文、BBS帖子 |
Squid,nginx,varnish | 前端web应用的缓存 | 静态数据,如:图片、附件、js、css、html等 |
2 Memcache服务在企业集群架构中应用的角色
1)作为数据库的前端缓存应用。
2)session会话共享的共享存储。
负载均衡的lnmp或lamp的php.ini配置文件中可配置session_save 指向配置好的memcached的服务器,这样用户登录的会话信息可以在memcached服务器中共享会话信息。
3 Memcached服务在应用中的工作流程
- 客户端访问web服务,再由web服务的php程序需要访问后端数据库获取数据时,通过设置php程序让客户端优先访问memcached内存缓存,如果缓存中有数据就直接返回前端web服务应用,如果memcached中没有数据,php程序(web服务)会访问后端的mysql数据库服务器,当php程序取得了后端mysql服务器给的数据后,php程序除了返给客户端数据外,还会把数据在memcached的内存中进行缓存,等待下次被访问,从而大大的减轻了数据库的压力,提高整个
2)网站架构的相应速度,提升了用户体验。
3)当程序更新、删除数据库中已有的数据时,会同时发送请求通知memcached已经缓存过的同一个ID内容的旧数据失效,从而保证memcached中的数据和数据库中的数据一致。
4)如果在高并发场合,处理通知memcached过期的缓存失效外,还会通过相关机制,使得在用户访问新数据前,通过程序预先把更新过的数据推送到memcached中缓存起来,这样可以减少数据库的访问压力,提升memcached中缓存的命中率。
4 Memcached服务在大型站点中的应用
几乎所有的网站,当访问量增大时,在整个网站集群架构中最先出现瓶颈的一定是数据库角色的服务器及存储角色的服务器,在工作中我们是尽量把用户的请求往前推,即当用户请求数据时,越是在靠近用户的一端把数据返回就越好。
5 缓解数据库的高并发访问压力的方案
1)在数据库层配置数据读写分离及读数据库做负载均衡。
2)更有效率的是部署memcached服务作为一个缓存区域,把部分数据库的信息保存在内存中,因为memcached也有单台单点缺陷,所以memcached也有负载均衡的应用场景。
6 memcached的删除机制
Memcached在分配空间时,优先使用已经过期的key/value对空间,当分配的内存空间占满时,memcached就会使用LRU算法来分配空间,删除最近最少使用的key/value对,将其空间分配给新的key/value对。在某些情况下,如果不想使用LRU算法,那么可以通过“-M”参数来启动memcached,这样memcached在内存耗尽时,会返回一个报错信息。
7 数据库企业案例
现象:数据库负载很高,用upload查看负载,load值20-30,登陆数据库查看:show processlist;show full processlist; mysql -uroot -p123 -e “show full processlist” |grep -vi sleep,发现数据库中像LIKE‘%……%’这样的内容很多。
原因:网站的搜索框所致,搜索次数太多,导致数据库负载高。
优化方案思路:
1)从业务上实现用户登陆后再搜索,这样减少搜索次数,从二减轻数据库服务压力。
2)如果有大量频繁的搜索,一般是由爬虫在爬你的网站,分析web的IP封掉。
3)配置主从同步,程序实现读写分离(最后让LIKE这样的语句从从库去查询,减轻压力)
4)LIKE ‘%……%’这样的语句在mysql中一般很难优化,可以通过搜索服务Sphinx软件实现搜索。
5)在数据库前面加上memcached缓存服务器。
Memcached说明:Memcached有服务端和客户端之分,memcached是服务端,memcache是客户端。
企业工作场景中如何配置memcached
在工作中,一般都是开发人员提出需求,说要部署一个memcache服务,作为缓存,我们运维接到需求,内存指定多大根据业务有多少数据要缓存来确定。还需要确定业务重要性,进而采取负载均衡,分布式等架构,最后确定并发连接数。实际的部署一般就是安装memcached服务端并确保能够连接上。
Memcached管理
1)telnet ip port 方式管理
2)命令直接操作,nc这样的命令
通过nc查看memcached的状态: printf “stats\r\n”|nc 127.0.0.1 11211
3)监控工具memadmin软件包。memadmin-1.0.11.tar
如果对运维课程感兴趣,可以在b站上搜索我的账号: 运维实战课程,可以关注我,学习更多免费的运维实战技术视频
猜你喜欢
- 2024-09-21 关于fastjson出现反序列化远程代码执行漏洞的通知
- 2024-09-21 玩转 Linux 之:磁盘分区、挂载知多少?
- 2024-09-21 Linux sed命令完全攻略(超级详细)
- 2024-09-21 解决Linux内核问题实用技巧之Crash工具结合/dev/mem任意修改内存
- 2024-09-21 实用的一些排查异常方法,你知道几种?
- 2024-09-21 linux之lsof详解(linux lsdev)
- 2024-09-21 Tomcat回显技术学习汇总(tomcat resin)
- 2024-09-21 shell中常用的特殊符号解析(shell中符号的用法)
- 2024-09-21 浅谈Linux三剑客sed命令篇一(linux sed)
- 2024-09-21 linux:常用的文件拷贝和移动以及其他命令,值得收藏
- 1514℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 568℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 509℃MySQL service启动脚本浅析(r12笔记第59天)
- 486℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 485℃启用MySQL查询缓存(mysql8.0查询缓存)
- 466℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 446℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 443℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)