Memcached原理与应用

标签: linux


笔者Q:972581034 交流群:605799367。有任何疑问可与笔者或加群交流

1.Memcached是什么

  • 高性能
  • 支持高并发
  • 分布式内存缓存系统
  • 协议简单且部署方便

    服务端软件名字如: Memcached-1.4.24.tar.gz

    客户端软件的名字形如: Memcache-2.25.tar.gz


2.作用和原理

  • 多数Web应用都将数据保存到关系型数据库中,如MySQL,Web服务器从中读取数据并在浏览器中显示。但随着数据量的增大、访问的集中,关系型数据库的负担就会出现加重、响应缓慢、导致网站打开延迟等问题。所以Memcached的主要目的是通过自身内存中缓存关系型数据库的查询结果,减少数据库自身被访问的次数,以提高动态Web应用的速度、提高网站架构的并发能力和可扩展性。

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

  • web服务器读取数据时先读memcached服务器,若memcached没有,则向数据库请求数据,然后web再把请求到的数据发送到memcached

常见内存缓存服务软件对比

软件 类型 主要作用
Memcached 纯内存型 常用于缓存网站后端的各类数据,例如数据库中的数据
Redis、Memcachedb(新浪开发) 可持久化存储,即使用内存,也会使用磁盘存储 1、缓存后端数据库的查询数据。 2、作为关系数据库的重要补充。
Squid、Nginx 内存或内存加磁盘缓存 主要用一缓存web前端的服务内容

应用场景

1.完整数据缓存

例如:电商的商品分类功能不会经常变动,就可以事先放到Memcached里,然后对外提供数据访问,即"数据预热"。

这时只需要读取缓存而无需读取数据,数据库访问压力大大降低了。

***

为什么商品分类数据可事先放到缓存?

因为商品分类几乎都是由内部人员管理的,如需更新数据,更新数据库后,就可以把数据同时更新到Memcached里。 商品分类更新频率不是很大。 如果把商品分类数据做成静态化文件,然后,通过在前端WEB缓存或者使用CDN加速效果更好。

2.热点数据缓存

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

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

几大电商双11秒杀场景:

在这种高并发情况下,必须先预热各种缓存,包括前端的Web缓存和后端数据库缓存。

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

***

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

即把客户端用户请求多个前端应用服务集群产生的session会话信息,统一存储到一个Memcached缓存中。

由于session会话数据是存储在内存中的,所以很快。

3.特性

  • 协议简单

    基于文本行的协议,可通过telnet/nc等命令直接操作memcached服务存取数据。

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

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

  • key/value键值数据类型

    被缓存的数据以key/value键值形式存在的,例如:

    oldboy—>36,key=oldboy,value=36

    oldgirl—>28,key=oldgirl,value=28

    通过oldboy key可以获取到36值,同理通过oldgirl key可以获取28值。

  • 全内存缓存,效率高

    memcached管理内存的方式非常高效,即全部的数据都存放于memcached服务事先分配好的内存中,无持久化存储的设计,和系统的物理内存一样,当重启系统或memcached服务时,memcached内存中的数据机会丢失。

如希望重启后,数据依然能保留,可采用redis——持久性内存缓存系统

当内存中缓存的数据容量达到服务启动时设定的内存值时,就自动使用LRU算法删除过期的缓存数据。也可以存放数据时对存储的数据设置过期时间,这样过期后数据就自动被清除,memcached服务本身不会监控数据过期,而是在访问的时候查看key的时间戳判断是否过期。

  • 可支持分布式集群

    memcached没有像MySQL那样的主从复制方式,分布式memcached集群的不同服务器之间是互不通信的,每一个节点都是独立存取数据,并且数据内容也应该是不一样的。通过对Web应用端的程序设计或者通过支持hash算法的负载均衡换件,可以让memcached支持大规模海量分布式缓存集群应用。

Memcached原理与应用的更多相关文章

  1. Memcached原理分析

    Memcached的内存管理方式 Memcached采用了名为Slab Allocation的机制分配,管理内存. Slab Allocation的原理相当简单.将分配的内存分割成各种尺寸的块(chu ...

  2. memcached原理全面剖析

    memcached会预先分配内存,memcached分配内存方式称之为allocator, 首先,这里有3个概念: 1 slab 2 page 3 chunk 一般来说一个memcahced进程会预先 ...

  3. memcached原理及介绍

    memcached是一种缓存技术,在存储在内存中(高性能分布式内存缓存服务器).目的 : 提速.(传统的都是把数据保存在关系型数据库管理系统既RDBMS,客户端请求时会从RDBS中读取数据并在浏览器中 ...

  4. 详解MemCached原理

    memcached是一个高性能的分布式内存缓存服务器,memcached在Linux上可以通过yum命令安装,这样方便很多,在生产环境下建议用Linux系统,memcached使用libevent这个 ...

  5. Memcached原理深度分析详解

    Memcached是 danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能.关于这个东 西,相信很多人都用过,本文意在通 ...

  6. Memcached原理

    Memcached是一套高性能的.分布式内存对象缓存系统.它由C写成,以Key/Value的方式将数据储存在内存中. 一.Memcached特性 Memcached作为高速运行的分布式缓存服务器,具有 ...

  7. Memcached 原理

    memcached  是以一个守护进程的方式运行于一个服务器和多个服务器之间的,等待接受客户端的连接操作,客户端可以有各种语言编写.(例如PHP). php 在客户端与服务器建立连接以后,接下来的事情 ...

  8. 高性能的分布式内存对象缓存系统Memcached

    Memcached概述   什么是Memcached? 先看看下面几个概念: Memory:内存存储,不言而喻,速度快,对于内存的要求高,不指出的话所缓存的内容非持久化.对于CPU要求很低,所以常常采 ...

  9. windows下Memcached 架设及java应用

    1  Memcached 介绍   Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态.数据 ...

随机推荐

  1. Java实现 中文转换成Unicode编码 和 Unicode编码转换成中文

    想要实现中文字符转换为Unicode编码的话主要用到的是一个这样的包,自己可以去API文档里面查看下的 java.util.Properties; 直接进入主题吧,主要是 package Test01 ...

  2. [已解决]pip安装包时报错:Read time out

    有一些包在源在国外,因为某些原因,网络并不是很好,常常会发生Read time out安装失败的问题. 一般解决方法有:修改国内的安装源,如果能够获取只是慢的话,还有中比较懒的方法就是增加读取的时间. ...

  3. viewport预备知识

    dpr === dppx dpr:device pixel ratio 设备像素比 dppx:Number of dots per px unit 每像素有多少点 . 1dppx = 96dpi dp ...

  4. flask-信号

    flask中的十个内置信号:request_started = _signals.signal('request-started') # 请求到来前执行 request_finished = _sig ...

  5. b9934107349625014ec251e1333d73a8 这个代码是mad5值

    Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.该算法的文件号为RFC 1321(R.Rives ...

  6. HDU 1248 寒冰王座(完全背包裸题)

    寒冰王座 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  7. webstorm中sftp远程调试配制

    sftp:secure file transfer protocol 文件安全传输协议 wb编辑代码,快速同步到远程 1.Tools -> Deployment -> Configurat ...

  8. 打开redis和solr

  9. [学习OpenCV攻略][007][缩小图片]

    cvPryDown(输入图片,输出图片) 根据输出图片的大小,把输入图片进行压缩 cvPryUp(输入图片,输出图片) 根据输出图片的大小,把输入图片进行放大 #include "cv.h& ...

  10. HDU 4034 Graph(Floyd变形——逆向判断)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4034 Problem Description Everyone knows how to calcu ...