Memcache介绍及使用场景

1. 什么是memcache

Memcached是一款开源、高性能、分布式内存对象缓存系统,可应用各种需要缓存的场景,其主要目的是通过降低对Database的访问来加速web应用程序。许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。 但随着数据量的增大、访问的集中,就会出现DB的负担加重、数据库响应恶化、 网站显示延迟等重大影响。

2. 为什么使用memcache?

memcache一般的使用目的是,通过缓存数据库查询的结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。 它是一个基于内存的“键值对”存储,用于存储数据库调用、API调用或页面引用结果的直接数据,如字符串、对象等。

3. memcache客户端

Memcache是这个项目的名称,而memcached是它服务器端的主程序文件名,也就是一个是项目名称,一个是主程序文件名,Memcached Client是他的客户端连接程序

Memcached Client目前有3种:
Memcached Client for Java,
SpyMemcached,
XMemcached

这三种Client一直存在各种争议:
Memcached Client for Java 比SpyMemcached更稳定、更早、更广泛;
SpyMemcached 比 Memcached Client for Java更高效;
XMemcached 比 SpyMemcache并发效果更好。

4.memcached设计思想

4.1,简单key/value存储:服务器不关心数据本身的意义及结构,只要是可序列化数据即可。存储项由“键、过期时间、可选的标志及数据”四个部分组成;
4.2,功能的实现一半依赖于客户端,一半基于服务器端:客户端负责发送存储项至服务器端、从服务端获取数据以及无法连接至服务器时采用相应的动作;服务端负责接收、存储数据,并负责数据项的超时过期;
4.3,O(1)的执行效率. O(1)的标准:恒定不变, o(1)特性使得10000个连接和1个连接的查询速度是一样的。 (memcached依赖于libevent实现从而实现O(1))
4.4,清理超期数据:默认情况下,Memcached是一个LRU缓存,同时,它按事先预订的时长清理超期数据;但事实上,memcached不会删除任何已缓存数据,只是在其过期之后不再为客户所见;而且,memcached也不会真正按期限清理缓存,而仅是当get命令到达时检查其时长;

5.memcached的协议与数据存取:

所谓协议,可以理解为对其操作(数据存取)的语法规则,存取数据的常用命令和参数如下:

5.1,set:将 value(数据值) 存储在指定的 key(键) 中。
在这里插入图片描述
5.2,get:表示从memcached取出key对应的值
在这里插入图片描述
5.3,delete:用于删除已存在的 key(键)。
在这里插入图片描述
5.4,所有命令统计:

1,存储类命令:set, add, replace, append, preprepend
2,统计类命令: stats, stats items, stats slabs, stats sizes
3,清理类命令: delete,fush_all

memcached有两大优点
一个是读写性能比较好,在高并发时反应比文件缓存要快一些,毕竟memcached是把数据写入到内存中的,读写都要比从硬盘读取快一些;另一个是memcached组件支持集群,可以用多个服务器进行缓存,并且是自动关了负载均衡的。在这里多服务器进行memcached的时候,应该采用的是每个服务器上的缓存写入不同的信息,这样的话,就把缓存数据进行了分离,大大增加了可用内存,避免了服务器内存的浪费,分离可以使用在写入缓存时在key上加入缓存服务器的标识。
memcached同样有两大缺点
一个就是缓存是有限的,一般的电脑memcached缓存达到2G,基本上就已经达到极限了,会影响电脑服务的稳定性,出现memcached缓存数据丢失的情况。另外一个就是,当服务器出现异常情况,比如停电,宕机等等,缓存数据都会全部丢失,因为缓存数据是存在内存中的。在这里需要注意一下,memcached是数据信息的来源但不能作为数据的唯一来源,他不能作为数据库来使用,只能作为一个快速存储通道,当memcached宕机,缓存信息全无的时候,需要让程序从其他地方调取数据,如数据库。现在数据库一般都使用云数据库,相对于memcached应该是独立的服务器,一般不会出现同时宕机的情况。

6.memcached在这几个地方较常使用:

6.1、缓存一些很小但是会被频繁访问的数据或文件,以及访问量很大的动态网页:一般的大数据的信息网站,比如招标网站、房产网站,这样的网站访问量一般比较大,对于网站文章等,这些基本上是一次成型,基本上不会修改的,并不适用于memcached,可以直接使用文件缓存。但是这样的网站一般首页的访问是较为频繁的,所以可以把网站上的信息分类缓存到memcached中,同样的,首页上的推荐信息也可以缓存到memcached中,这样就大大的减轻了服务器的压力。
6.2、可以缓存计算好的结果:在举一下上个例子,比如招标网,某一分类下的信息可能达到了几百万,这个时候,每次访问列表都需要获取一下总条数,这个如果数据库引擎是innodb,那么获取总条数的时间可能在2s以上,对于客户来说两秒的等待时间无疑已经比较长了,并且一般招标的网站的信息都是第一天写入,第二天才发布,或者在晚上的时候写入,并没有特别高的实时性要求,或者说最早之前写入的数据存在的意义已经不大了,那这个时候,我们可以把这个总条数缓存到memcached中,每天零点更新一下memcached中的总条数,这样就大大的加快了访问速度。
6.3、可以缓存session数据(临时数据):比如社交网站,一般用户的在线时间都比较长,这个时候数据如果存在数据库中的话,每次都从数据中读取,无疑数据库的压力是非常大的,这里可以采用memcached集群,把session数据按照用户id或者其他划分到不同的memcached中,这样就减少了对数据库的读写操作,这里需要注意的一点是:session的缓存必须进行更新,需要考虑session的有效时长,以及用户活动状态,延长session的有效时长。
6.4、可以缓存最热度的信息:以房产网站为例,比如某小区的房源,搜索查看度特别热,可以把这个搜索的sql语句结果写入到session中,这样也极大的减轻了服务器的压力,还提高了客户的体验度。

发布了1 篇原创文章 · 获赞 0 · 访问量 48

猜你喜欢

转载自blog.csdn.net/RainXu0429/article/details/104689033