优秀的编程知识分享平台

网站首页 > 技术文章 正文

memcached/memcache基础(memcache底层实现原理)

nanyue 2024-09-21 19:50:55 技术文章 7 ℃

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服务在应用中的工作流程

  1. 客户端访问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站上搜索我的账号: 运维实战课程,可以关注我,学习更多免费的运维实战技术视频

Tags:

最近发表
标签列表