memcached是一种缓存技术,在存储在内存中(高性能分布式内存缓存服务器).目的 : 提速.(传统的都是把数据保存在关系型数据库管理系统既RDBMS,客户端请求时会从RDBS中
读取数据并在浏览器中显示,这样当访问量过大时或集中时,导致RSBMS负担过重,数据库响应恶化,浏览器中显示延迟等严重问题,使用memcached减少数据库查询和访问次数以
提供访问速度,提供扩展性)memcached为key->value非关系型数据库,key为一般子串,值唯一.value除了php中的资源不能存,其它的数据都能存储(字符串,数值,数组,对象,布尔值
,null,二进制<图片,视频>)
提速方法 :
1.传统 : 模拟cached方法(存储到数据库时生成一份静态文件到磁盘中)
2.直接操作内存(内存表,memcached服务维持了一张内存表hashdata)
3.CPU寄存器(最高速的,但是代价成本高)
memcached特征 :
1.协议简单(文本行协议)
2.基于libevent事件处理(注 : libevent是一个程序库,封装了linux的epoll,BSD等操作系统的kqueue等事件处理功能.即使对服务器的连接数添加,也能发挥O(1)的性能.
memcached在linux,BSD等操作系统上能发挥其高性能.)
3.内置内存存储方式(存储在memcached内置的内存存储空间中,提高性能.问题 : memcached重启或操作系统重启数据会丢失,达到一定量后会启动算法自动删除不使用的缓存)
4.不互相通信的分布式(不互相通信共享信息)
memcached作用 :
1.高性能分布式缓存服务器(缓存数据库查询结果,减少数据库访问次数)
缓存读取/写入过程 : 首次访问 : 从RDBMS中取得数据保存到memcached;第二次后 : 从memcached中取得数据显示页面.
memcached适合做的东西 :
1.访问频繁的字典数据
2.大量的hot数据(热门数据缓存)
3.页面缓存(web站常用)
4.搜索的查询条件和结果(热门搜索的内存缓存起来)
5.临时处理数据(不需要入库,排重)
memcached工作原理 :
memcached的工作就是在专门的机器的内存里维护一张巨大的hash表,来存储经常被读写的一些数组与文件,从而极大的提高网站的运行效率.
采用的是C/S模式,在server端启动服务进程,在启动时可以指定监听的ip,自己的端口号,所使用的内存大小等几个关键参数.采用了单进程,单线程,异步I/O,基于事件(event_based)
的服务方式.使用libevent作为事件通知实现.每个Server只是对自己的数据进行管理.Client端通过指定Server端的ip地址(通过域名应该也可以).以key->value形式,key
的值通过hash进行转换,然后确定对那台server存储/获取数据.
memcached内存算法 :
使用的是slab allocation机制分配和管理内存,按照预先规定的大小,将分配的内存分割成特定长度的内存块,再把尺寸相同的内存块分成组,数据在存放时,根据键值大小去
匹配slab大小,找就近的slab存放,所以存在空间浪费现象.
memcached缓存策略 :
是LRU(最近最少使用)加上到期失效策略.当你在memcached内存储数据项时,你有可能会指定它在缓存的失效时间,默认为永久.当memcached服务器用完分配的内存时,失效的
数据被首先替换,然后也是最近使用的数据.在LRU中,memcached使用的是一种Lazy Expiration策略,自己不会监控存入的key/value对是否过期,而是在获取key值时查看记录
的时间戳,检查key/value对空间是否过期,这样可减轻服务器的负载.
memcached失效策略 :
Lazy expiration + LRU
Lazy expiration作用 : 假如我们所存储的数据项相对多的时候,在这时候进行监控的话,话费的代价是相当大的,所以memcached不会在过期监视上耗费风度哦的CPU时间,
从而在性能方法也起到一定的优化作用.
LRU : memcached会优先使用已超时的空间,但是还是会有追加信息时空间不足的状态,这时候会使用Least Recently Used(LRU)机制来分配空间,就从最近未被使用的记录
中搜索,并将其空间分配给新的记录.
memcached分布式算法 :
当向memcached集群存入/取出Key/value时,memcached客户端会根据一定算法计算存入那台服务器.(第一步 : 选择服务器,第二步 : 存取数据)
余数算法 : 先求得键的整数散列值,再除以服务器数量,根据余数觉得存储那台服务器.(特点 : 简单,高效.但是扩展性差,服务器数量变更时,几乎所有的缓存都会失效)
散列算法 : 先计算memcached的散列值,并将其发布在0-2^32的圆上,然后用同样的方法算出存储数据键的散列值并映射至圆上,最后从数据映射到的位置开始顺时针查找,
将数据保存在查找到的第一台服务器,如果超过2^32还是找不到,则将数据保存在第一台memcached服务器上.如果添加一台memcached服务器,则只在圆上添加的逆时针方向
的第一台服务器上的键会受到影响.

memcached与redis比较
memcached : 支持多核,内存利用率高,无持久性,数据结构简单.
redis : 单核,内存利用率低(采用压缩会比memcached高),有(硬盘存储,主从同步),数据结构复杂.
注释 :
散列值 : 将值从一个大的(可能很大)定义域映射到一个较小值域的(数学)函数.散列函数是把该函数应用到大的定义域中的若干值得(大)集合的结果可以均匀地(和随机地)
被分布在该范围上.

memcached原理及介绍的更多相关文章

  1. Timer与TimerTask的真正原理&使用介绍

    转载: Timer与TimerTask的真正原理&使用介绍 其实就Timer来讲就是一个调度器,而TimerTask呢只是一个实现了run方法的一个类,而具体的TimerTask需要由你自己来 ...

  2. Memcached原理与应用

    Memcached原理与应用 标签: linux 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 1.Memcached是什么 高性能 支持高并发 分布式内存缓存 ...

  3. LDAP服务器的概念和原理简单介绍

    LDAP服务器的概念和原理简单介绍 1. 目录服务 目录是一个为查询.浏览和搜索而优化的专业分布式数据库,它呈树状结构组织数据,就好象Linux/Unix系统中的文件目录一样.目录数据库和关系数据库不 ...

  4. (转)OpenStack —— 原理架构介绍(一、二)

    原文:http://blog.51cto.com/wzlinux/1961337 http://blog.51cto.com/wzlinux/category18.html-------------O ...

  5. Unity3d 发动机原理详细介绍

    Unity3d 发动机原理详细介绍 www.MyException.Cn   发布于:2013-10-08 16:32:36   浏览:46次 0     Unity3d 引擎原理详细介绍 体系结构 ...

  6. Docker系列之原理简单介绍

    目录 1.1.Docker架构简介 1.2.Docker 两个主要部件 1.3.虚拟机和Docker对比: 1.4.Docker内部结构 Docker系列之原理简单介绍 @ Docker是一个开源的应 ...

  7. 5.如何保证 redis 的高并发和高可用?redis 的主从复制原理能介绍一下么?redis 的哨兵原理能介绍一下么?

    作者:中华石杉 面试题 如何保证 redis 的高并发和高可用?redis 的主从复制原理能介绍一下么?redis 的哨兵原理能介绍一下么? 面试官心理分析 其实问这个问题,主要是考考你,redis ...

  8. Memcached(1)-----基本介绍

    memcached memcached概述 memcached是LiveJournal旗下Danga Interactive公司开发的一款软件.memcached是一个高性能,分布式内存对象缓存系统, ...

  9. memcached原理全面剖析

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

随机推荐

  1. 【万里征程——Windows App开发】控件大集合1

    加入控件的方式有多种.大家更喜欢哪一种呢? 1)使用诸如 Blend for Visual Studio 或 Microsoft Visual Studio XAML 设计器的设计工具. 2)在 Vi ...

  2. CodeForces 318D Ants

    题目链接 题意: 有n仅仅蚂蚁和m次询问 n仅仅蚂蚁初始所有位于起点(0,0)处.每4仅仅蚂蚁在同一格就会以该格为中心向上下左右四个方向爬一格 一仅仅向上,一仅仅向下,一仅仅向左.一仅仅向右 假设每一 ...

  3. 关于UDID和UUID的区别

    关于UDID和UUID的区别   一.UDID(Unique Device Identifier) UDID是Unique Device Identifier的缩写,中文意思是设备唯一标识. 在很多需 ...

  4. linux led子系统(一)

    就像学编程第一个范例helloworld一样,学嵌入式,单片机.fpga之类的第一个范例就是点亮一盏灯.对于庞大的linux系统,当然可以编写一个字符设备驱动来实现我们需要的led灯,也可以直接利用g ...

  5. 电脑突然死机,编译报错dll缺少依赖项

    由于ASP.NET缓存没更新的问题(我的就是这个问题.电脑突然死机导致的). 把这个文件夹下的文件所有删除C:\Windows\Microsoft.NET\Framework\v2.0.50727\T ...

  6. poj 1015 Jury Compromise(背包+方案输出)

    \(Jury Compromise\) \(solution:\) 这道题很有意思,它的状态设得很...奇怪.但是它的数据范围实在是太暴露了.虽然当时还是想了好久好久,出题人设了几个限制(首先要两个的 ...

  7. LeetCode之16----3Sums Closest

    题目: Given an array S of n integers, find three integers in S such that the sum is closest to a given ...

  8. MFC中CAsyncSocket和CSocket

    原文链接:https://blog.csdn.net/libaineu2004/article/details/40395917 摘要部分重点: 1.CAsyncSocket类逐个封装了WinSock ...

  9. redis03----集合 set 相关命令

    集合 set 相关命令 集合的性质: 唯一性,无序性,确定性 注: 在string和link的命令中,可以通过range 来访问string中的某几个字符或某几个元素 但,因为集合的无序性,无法通过下 ...

  10. Parallels Desktop 设置win网络连接

    目的: 1 虚拟机中的win系统技能访问外网 2 可以和Mac系统互联 首先来实现1,很简单: 打开控制中心对应系统的设置 选择[硬件]->[网络] 源:设置共享网络 到此就达到1目的了: 现在 ...