memcache服务应用实践

一, Memcached介绍

1.1 Memcached与常见同类软件对比

(1)Memcached是什么?

Memcached是一个开源的,支持高性能,高并发的分布式内存缓存系统,由C语言编写,总共2000多行代码。从软件名称上看,前3个字符“Mem”就是内存的意思,而接下来的后面5个字符“cache”就是缓存的意思,最后一个字符d,是daemon的意思,代表是服务器端守护进程模式服务。

Memcached服务分为服务器端和客户端两部分,其中,服务器端软件的名字形如Memcached-1.4.24.tar.gz,客户端软件的名字形如Memcache-2.25.tar.gz

Memcached软件诞生于2003年,最初由LiveJournal的Brad Fitzpatrick开发完成。Memcache是整个项目的名称,而Memcached是服务器端的主程序名,因其协议简单,应用部署方便,且支持高并发,因此被互联网企业广泛使用,直到现在仍然如此。其官方网站地址:http://memcached.org/.

(2)Memcached的作用

传统场景中,多数Web应用都将数据保存到关系型数据库中(例如:MySQL),Web服务器从中读取数据并在浏览器中显示。但随着数据量的增大,访问的集中,关系型数据库的负担就会出现加重,响应缓慢,导致网站打开延迟等问题,影响用户体验。

这时就需要Memcached软件出马了。使用Memcached的主要目的是,通过在自身内存中缓存关系型数据库的查询结果,减少数据库被访问的次数,以提高动态Web应用的速度,提高网站架构的并发能力和可扩展性。

Memcached服务的运行原理是通过在事先规划好的系统内存空间中临时缓存数据库中的各类数据,以达到减少前端业务服务对数据库的直接高并发访问,从而提升大规模网站集群中动态服务的并发访问能力。

-生产场景的Memcached服务一般被用来保存网站中经常被读取的对象或数据,就像我们的客户端浏览器也会把经常访问的网页缓存起来一样,通过内存缓存来存取对象或数据要比磁盘存取快很多,因为磁盘是机械的,因此,在当今的IT企业中,Memcached的应用范围很广泛。

2 互联网常见内存缓存服务软件

二,Memcached的用途与应用场景

2.1 Memcached常见用途工作流程

Memcached是一种内存缓存软件,在工作中经常用来缓存数据库的查询数据,数据被缓存在事先与分配的Memcached管理的内存中,可以通过API或命令的方式存取内存中缓存的这些数据,Memcached服务内存中缓存的数据就像一张巨大的hash表,每条数据都是以key-value对的形式存在。

2.1.1网站读取Memcached数据时工作流程

从逻辑上来说,当程序访问后端数据库获取数据时会优先访问Memcached缓存,如果缓存中有数据就直接返回给客户端用户,如果没有合适的数据(没有命中),再去后端的数据库读取数据,读取到需要的数据后,就会把数据返回给客户端,同时还会把读取到的数据缓存到Memcached内存中,这样客户端用户再次请求相同的数据时就会直接读取Memcached缓存的数据了,这就大大地减轻了后端数据库的压力,并提高了整个网站的响应速度,提升了用户体验。

展示了Memcached缓存系统和后端数据库系统的协作流程

后缓存技术---数据库局部的数据缓存到memcache中(热点数据较多)

先缓存技术-----数据库的所有数据的缓存到memcache中大大提高了服务器的命中率

如上图所示:使用Memcached缓存查询的数据来减少数据库压力的具体工作流程如下:

(1)Web程序首先检查客户端请求的数据是否在Memcached缓存中存在,如果存在,直接把请求的数据返回给客户端,此时不再请求后端数据库。

(2)如果请求的数据在Memcached缓存中不存在,则程序会去请求数据库服务,把从数据库中取到的数据返回给客户端,同时把新取到的数据缓存一份到Memcached缓存中。

2.1.2 网站更新Memcached数据时的工作流程

具体流程如下:

(1)当程序更新或删除数据时,会首先处理后端数据库中的数据。

(2)在处理后端数据库中数据的同时,也会通知Memcached,告诉它对应的旧数据失效,从而保证Memcached中缓存的数据始终和数据库中一致,这个数据一致性非常重要,也是大型网站分布式缓存集群最头疼的问题所在。

(3)如果是在高并发读写场合,除了要程序通知Memcached过期的缓存失效外,还可能要通过相关机制,例如在数据库上部署相关程序(如在数据库中设置触发器使用UDFs),实现当数据库有更新时就把数据更新到Memcached服务中,这样一来,客户端在访问新数据时,因预先把更新过的数据库数据复制到Memcached中缓存起来了,所以可以减少第一次查询数据库带来的访问压力,提升Memcached中缓存的命中率,甚至新浪门户还会把持久化存储Redis做成MySQL数据库的从库,实现真正的主从复制。

下图为Memcached网站作为缓存应用更新数据的流程

memcache到服务作为缓存应用通过相关软件更新数据的流程

http://static.zybuluo.com/chensiqi/um4nsru1t315dtbwe8p9bnhf/QQ%E6%88%AA%E5%9B%BE20170804233252.png在生产工作中,网站Web服务器作为缓存应用更新数据的方案更为常用,即由网站程序负责更新Memcached缓存

2.2 Memcached在企业中的应用场景

2.2.1 作为数据库的查询数据缓存

(1)完整数据缓存

例如:电商的商品分类功能不是经常变动的,因此可以事先放到Memcached里,然后再对外提供数据访问。这个过程被称之为“数据预热”。

此时只需读取缓存,无需读取数据库就能得到Memcached缓存里的所有商品分类数据了,所以数据库的访问压力就会大大降低。

为什么商品分类数据可以事先放在缓存里呢?

因为,商品分类几乎都是由内部人员管理的,如果需要更新数据,更新数据库后,就可以把数据同时更新到Memcached里。

如果把商品分类数据做成静态化文件,然后,通过在前端Web缓存或者使用CDN加速效果更好。

(2)热点数据缓存

热点数据缓存一般是用于由用户更新的商品,例如淘宝的卖家,在卖家新增商品后,网站程序就会把商品写入后端数据库,同时把这部分数据,放入Memcached内存中,下一次访问这个商品的请求就直接从Memcached内存中取走了。这种方法用来缓存网站热点的数据,即利用Memcached缓存经常被访问的数据。

提示:

这个过程可以通过程序实现,也可以在数据库上安装相关软件进行设置,直接由数据库把内容更新到Memcached中,就相当于Memcached是MySQL的从库一样。

如果碰到电商双11,秒杀高并发的业务场景,必须要事先预热各种缓存,包括前端的Web缓存和后端的数据库缓存。

也就是先把数据放入内存预热,然后逐步动态更新。此时,会先读取缓存,如果缓存里没有对应的数据,再去读取数据库,然后把读到的数据放入缓存。如果数据库里的数据更新,需要同时触发缓存更新,防止给用户过期的数据,当然对于百万级别并发还有很多其他的工作要做。

绝大多数的网站动态数据都是保存在数据库当中的,每次频繁地存取数据库,会导致数据库性能急剧下降,无法同时服务更多的用过户(比如MySQL特别频繁的锁表就存在此问题),那么,就可以让Memcached来分担数据库的压力。增加Memcached服务的好处除了可以分担数据库的压力以外,还包括无须改动整个网站架构,只须简单地修改下程序逻辑,让程序先读取Memcached缓存查询数据即可,当然别忘了,更新数据时也要更新Memcached缓存。

2.2.2 作为集群节点的session会话共享存储

即把客户端用户请求多个前端应用服务集群产生的session会话信息,统一存储到一个Memcached缓存中。由于session会话数据是存储在内存中的,所以速度很快。

三,Memcached的特点与工作机制

3.1 Memcached的特点

Memcached作为高并发,高性能的缓存服务,具有如下特点:

协议简单。Memcached的协议实现很简单,采用的是基于文本行的协议,能通过telnet/nc等命令直接操作memcached服务存储数据。

支持epoll/kqueue异步I/O模型,使用libevent作为事件处理通知机制。

简单的说,libevent是一套利用c开发的程序库,它将BSD系统的kqueue,Linux系统的epoll等事件处理功能封装成一个接口,确保即使服务器端的连接数增加也能发挥很好的性能。Memcached就是利用这个libevent库进行异步事件处理的。

memcache服务安装

1 下载公网源

安装支持包

yum -y install libevent libevent-devel nc

yum -y install memcached

启动memcached

Memcached启动命令相关参数说明

进程与连接设置:

|命令参数|说明|

|--|--|

|-d|以守护进程(daemon)方式运行服务|

|-u|指定运行Memcached的用户,如果当前用户为root,需要使用此参数指定用户|

|-l|指定Memcached进程监听的服务器IP地址,可以不设置此参数|

|-p(小写)|指定Memcached服务监听TCP端口号。默认为11211|

|-P(大写)|设置保存Memcached的pid文件($$),保存PID到指定文件|

内存相关设置:

命令参数 说明

-m 指定Memcached服务可以缓存数据的最大内存,默认为64MB

-M Memcached服务内存不够时禁止LRU,如果内存满了会报错

-n 为key+value——flags分配的最小内存空间,默认为48字节

-f chunk size增长因子,默认为1.25

-L 启用大内存页,可以降低内存浪费,改进性能

并发连接设置:

并发连接设置 说明

-c 最大的并发连接数,默认是1024

-t 线程数,默认4.由于Memcached采用的是NIO,所以太多线程作用不大

-R 每个event最大请求数,默认是20

-C 禁用CAS(可以禁止版本计数,减少开销)

测试参数:

-v 打印较少的errors/warnings

-vv 打印非常多调试信息和错误输出到控制台

-vvv 打印极多的调试信息和错误输出,也打印内部状态转变

向memcached中写入数据实践

出现STORED表示成功添加key1级对应的数据

通过printf配置nc从Memcached中读取数据

get 查数据

delete 删除数据

运维连接memcached服务端

memcached客户端

安装部署客户端

cd /usr/local/php/lib

vim php.ini

检查php语法

重启php

打开浏览器

输入 域名/test_inifo.php

原文地址:https://www.cnblogs.com/blog-css-com/p/10029298.html

时间: 2024-10-09 21:27:58

memcache服务应用实践的相关文章

企业级Memcached服务应用实践。

企业级Memcached服务应用实践 Memcached服务 一, Memcached介绍 1.1 Memcached与常见同类软件对比 (1)Memcached是什么? Memcached是一个开源的,支持高性能,高并发的分布式内存缓存系统,由C语言编写,总共2000多行代码.从软件名称上看,前3个字符"Mem"就是内存的意思,而接下来的后面5个字符"cache"就是缓存的意思,最后一个字符d,是daemon的意思,代表是服务器端守护进程模式服务. Memcach

centos 安装memcache服务后memcahce本机连接Permission

自己手动在虚拟机下装了下memcache,整个过程真是充满波折,本身用php5.3安装memcache扩展就麻烦很多,无法通过yum直接安装,安装方法详见http://chenwei.me/blog/server/69.html,接下来安装memcache服务,安装成功后,telnet可以成功,不过好像不是立即成功生效,过一会用stats才会有详细显示. 本机用 <?php $mem = new Memcache; $mem->connect(‘192.168.124.129′,11211)

微服务架构实践 - 你只懂docker与spring boot就够了吗?

微服务架构实践 - 你只懂docker与spring boot就够了吗? 作者 浮云发发 已关注 2017.02.27 02:50* 字数 2613 阅读 2583评论 6喜欢 35赞赏 2 微服务并不是单独存在的,为了更好地实现微服务架构,需要整合许多组件混搭使用,方能打通任督二脉,天下无敌.网上很多大拿讲了微服务治理的内容,也有人单方面讲微服务的,比如spring boot与docker,本文着重于组件选型的较量,也积累了我们团队多次PK的精华:这些组件包括spring boot.sprin

基于ITIL的医院信息化服务管理实践

现代医院管理和先进医院运营,对信息化的依赖度越来越高.大力加强信息化建设投入,已经成为医院实现精细化管理,规范化运营所需的必要条件. 国家十三五规划以来,新政策.新兴技术与应用的浪潮,都在促使传统医院的发展战略和盈利模式的转变,这些转变也必将对医院信息化以及医院信息化服务提出更高的要求与挑战. 信息中心作为医院信息化建设和医院信息化服务工作的主体部门,在医院运营中起到的作用日渐重要,特别是日常IT服务工作质量和效率,将直接关乎医院日常的生产经营质量.因此,信息化服务管理水平,将逐渐成为医院业务发

我们必须要知道的RESTful服务最佳实践

看过很多RESTful相关的文章总结,参齐不齐,结合工作中的使用,非常有必要归纳一下关于RESTful架构方式了,RESTful只是一种架构方式的约束,给出一种约定的标准,完全严格遵守RESTful标准并不是很多,也没有必要.但是在实际运用中,有RESTful标准可以参考,是十分有必要的. 实际上在工作中对api接口规范.命名规则.返回值.授权验证等进行一定的约束,一般的项目api只要易测试.足够安全.风格一致可读性强.没有歧义调用方便我觉得已经足够了,接口是给开发人员看的,也不是给普通用户去调

基于 Docker 的微服务架构实践

本文来自作者 未闻 在 GitChat 分享的{基于 Docker 的微服务架构实践} 前言 基于 Docker 的容器技术是在2015年的时候开始接触的,两年多的时间,作为一名 Docker 的 DevOps,也见证了 Docker 的技术体系的快速发展.本文主要是结合在公司搭建的微服务架构的实践过程,做一个简单的总结.希望给在创业初期探索如何布局服务架构体系的 DevOps,或者想初步了解企业级架构的同学们一些参考. Microservice 和 Docker 对于创业公司的技术布局,很多声

滴滴出行基于RocketMQ构建企业级消息队列服务的实践

小结: 1. https://mp.weixin.qq.com/s/v6NM3UgX-qTI7yO1QPCJrw 滴滴出行基于RocketMQ构建企业级消息队列服务的实践 原创: 江海挺 阿里巴巴中间件 2018-11-01 原文地址:https://www.cnblogs.com/yuanjiangw/p/10780829.html

memcache的最佳实践方案

1.memcached的基本设置 1)启动Memcache的服务器端 # /usr/local/bin/memcached -d -m 10 -u root -l 192.168.0.200 -p 12000 -c 256 -P /tmp/memcached.pid -d选项是启动一个守护进程, -m是分配给Memcache使用的内存数量,单位是MB,我这里是10MB, -u是运行Memcache的用户,我这里是root, -l是监听的服务器IP地址,如果有多个地址的话,我这里指定了服务器的IP

云计算之openstack基础服务之一keystone服务最佳实践

1.openstack简介 Openstack是一个项目,该项目支持所有类型的云环境的一个开源云计算平台,该项目的目的是为了实现简单,大规模可扩展性,以及丰富功能集,来自世界各地的云计算专家项目作出贡献.Openstack提供了一个基础架构即服务(Iaas)并通过各种配套服务的解决方案,每个服务提供一个应用编程接口来完成整个openstack的结合. 架构图如下: 相关服务介绍: 服务名称 项目名称 描述 Dashboard Horizon 基于openstackAPI接口使用Django开发的