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. DAY5-小别-2018-1-15

    有两天没有写了,前天考完试出去浪了,惭愧自己没有学习:昨天,启程回家看完了循环内容的视频,晚上十点半火车到站,没抽出时间写了,还看了<黑客帝国>,有点小感触,人工智能的时代即将到来,我们该 ...

  2. Object.keys、Object.getOwnPropertyNames区别

    用途 Object.keys 定义:返回一个对象可枚举属性的字符串数组: Object.getOwnPropertyNames 定义:返回一个对象可枚举.不可枚举属性的名称: 属性的可枚举性.不可枚举 ...

  3. 循序渐进之Spring AOP(2) - 基本概念

    学习AOP前要先了解几个重要术语:Joinpoint.Pointcut.Advice 仍然以改装车比喻,拿到心爱的汽车后想做改装,第一件事是什么?找到要改装的地方.车上可改装的地方很多,但每个人感兴趣 ...

  4. Sql的基础知识(一)

    一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份 sql server --- ...

  5. android文件管理器源码、斗鱼直播源码、企业级erp源码等

    Android精选源码 文件清理管理器 自定义水平带数字的进度条以及自定义圆形带数字的进度条 利用sectionedRecyclerViewAdapter实现分组列表的recyclerView源码 流 ...

  6. EMC题

    [面试题]EMC易安信面试题解 1. 除以59的余数是多少. 来自wiki:费马小定理是数论中的一个定理:假如a是一个整数,p是一个質数,那么 如果a不是p的倍数,这个定理也可以写成 这个书写方式更加 ...

  7. excel数据导出新妙招

    之前在做项目的时候需要将数据库中的数据导出为excel表格一遍打印查阅,在网上找了很多插件也没有找到自己理想的好用的插件(也就是说没有找到令我满意的插件),最近在学习a标签的相关知识时理解到,a标签不 ...

  8. [国嵌笔记][033-034][设置svc模式]

    [设置svc模式] 设置CPU为SVC模式 1.因为初始化系统需要有很高的权限,SVC模式具有该权限,所以首先要使系统工作在SVC(0b10011)模式 2.设置cprs为0xd3(0b1101001 ...

  9. Personal Learning Path of Java——Java语言基础

    Java语言是面向对象编程语言,Java程序的基本组成单元是类,类体中又包括属性和方法两部分.每一个程序都必须包含一个main()方法,含有main()方法的类称为主类. 如下面代码: package ...

  10. Spark应用_PageView_UserView_HotChannel

    Spark应用_PageView_UserView_HotChannel 一.PV 对某一个页面的访问量,在页面中进行刷新一次就是一次pv PV {p1, (u1,u2,u3,u1,u2,u4-)} ...