Memcached原理与应用
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原理与应用的更多相关文章
- Memcached原理分析
Memcached的内存管理方式 Memcached采用了名为Slab Allocation的机制分配,管理内存. Slab Allocation的原理相当简单.将分配的内存分割成各种尺寸的块(chu ...
- memcached原理全面剖析
memcached会预先分配内存,memcached分配内存方式称之为allocator, 首先,这里有3个概念: 1 slab 2 page 3 chunk 一般来说一个memcahced进程会预先 ...
- memcached原理及介绍
memcached是一种缓存技术,在存储在内存中(高性能分布式内存缓存服务器).目的 : 提速.(传统的都是把数据保存在关系型数据库管理系统既RDBMS,客户端请求时会从RDBS中读取数据并在浏览器中 ...
- 详解MemCached原理
memcached是一个高性能的分布式内存缓存服务器,memcached在Linux上可以通过yum命令安装,这样方便很多,在生产环境下建议用Linux系统,memcached使用libevent这个 ...
- Memcached原理深度分析详解
Memcached是 danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能.关于这个东 西,相信很多人都用过,本文意在通 ...
- Memcached原理
Memcached是一套高性能的.分布式内存对象缓存系统.它由C写成,以Key/Value的方式将数据储存在内存中. 一.Memcached特性 Memcached作为高速运行的分布式缓存服务器,具有 ...
- Memcached 原理
memcached 是以一个守护进程的方式运行于一个服务器和多个服务器之间的,等待接受客户端的连接操作,客户端可以有各种语言编写.(例如PHP). php 在客户端与服务器建立连接以后,接下来的事情 ...
- 高性能的分布式内存对象缓存系统Memcached
Memcached概述 什么是Memcached? 先看看下面几个概念: Memory:内存存储,不言而喻,速度快,对于内存的要求高,不指出的话所缓存的内容非持久化.对于CPU要求很低,所以常常采 ...
- windows下Memcached 架设及java应用
1 Memcached 介绍 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态.数据 ...
随机推荐
- Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
方法的重写Overriding和重载Overloading是Java多态性的不同表现.重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现.如 ...
- python Database Poll for SQL SERVER
python连接SQL SERVER数据库: Python编程中可以使用SQL SERVER 进行数据库的连接及诸如查询/插入/更新等操作,但是每次连接SQL SERVER 数据库请求时,都是独立的去 ...
- [linux] C语言Linux系统编程-socket开发响应HTTP协议
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h&g ...
- HTML基础知识(表格、表单)
6.表格 l 概念:表格一定具有行和列 注:使用<thead><tbody><tfoot>,使浏览器能独立于表格表头和表格页脚的表格主体滚动.当包含多个页面的表格 ...
- 声音变调算法PitchShift(模拟汤姆猫) 附完整C++算法实现代码
上周看到一个变调算法,挺有意思的,原本计划尝试用来润色TTS合成效果的. 实测感觉还需要进一步改进,待有空再思考改进方案. 算法细节原文,移步链接: http://blogs.zynaptiq.com ...
- 学习笔记-echarts x,y轴样式
//改变坐标轴文本的样式axisLabel:{ textStyle:{ color:'#fff' }},//改变坐标轴和文本的样式axisLine:{ lineStyle:{ color:'#fff' ...
- DOCKER 开发学习记录
DOCKER常用命令及参数 DOCKER镜像管理命令: 检索:docker search image_name 下载:docker pull image_namge 查看本地镜像:docker ima ...
- UVA 1030 - Image Is Everything【模拟+思维+迭代更新】
题目链接:uva 1030 - Image Is Everything 题目大意:有一个最大为n*n*n的立方体的一个不规整立体,由若干个1*1*1的小正方体构成(每一个小正方体被涂成不同的颜色),给 ...
- 我的第五个网页制作:pre、html转义、abbr标签的使用
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- JS实现单选按钮回显时页面效果出现,但选中单选框的值为空
最近做了很多前端页面的工作,遇到的一个感觉很头疼的问题在这里记一下: 经常用JS回显单选框,但是明明从页面效果上来看,单选框已经被选中了,可是却不能触发单选框的change事件,取值的时候用某种方法取 ...