Memcached原理详解

合集下载

8种缓存框架介绍

8种缓存框架介绍

8种缓存框架介绍缓存框架是一种用于存储和管理缓存数据的软件工具或库。

它们用于提高应用程序的性能,减少数据库或其他远程资源的访问次数。

在本文中,我们将介绍8种流行的缓存框架,包括Redis、Memcached、Ehcache、Guava Cache、Caffeine、Hazelcast、Infinispan和Apache Geode。

1. Redis: Redis是一个基于内存的缓存框架,提供了丰富的数据结构和灵活的功能,包括缓存、消息队列和数据持久化。

Redis的性能出色,并且具有高可用性和扩展性。

2. Memcached: Memcached是另一个流行的基于内存的缓存框架,广泛用于提高Web应用程序的性能。

它具有简单的架构和易于使用的API。

Memcached可以在多台服务器上进行水平扩展,以提供更高的负载能力。

3. Ehcache: Ehcache是一个Java缓存框架,可以用于将缓存添加到应用程序中。

它具有简单易用的API,并提供了多种缓存策略,如LRU (最近最少使用)和FIFO(先进先出)。

Ehcache还支持磁盘持久化和分布式缓存。

4. Guava Cache: Guava Cache是Google开发的一个轻量级缓存库,可以在本地JVM中实现缓存功能。

它具有内存敏感的淘汰策略和异步加载机制,可以优化资源利用和应用程序响应时间。

5. Caffeine: Caffeine是另一个基于本地内存的缓存库,由Google开发。

它被设计为高性能、无锁的缓存框架,并且具有比Guava Cache更高的吞吐量和更低的延迟。

6. Hazelcast: Hazelcast是一个分布式缓存框架和数据网格,可以在多个服务器上共享缓存数据。

它提供了分布式数据结构和分布式计算功能,并支持高可用性和容错性。

7. Infinispan: Infinispan是另一个开源的分布式缓存框架,用于构建高性能和高可靠性的应用程序。

Memcached使用及原理

Memcached使用及原理
Memcached使用及原理
研发管理部 陈海涛 2011-06-10
2014-6-25
1
什么是Memcached
Memcached是(运营LiveJournal的技术团队)开发的一套分布式内存对象
缓存系统。常用于减少数据库负载,提升性能。 社区网站主页:/ 开发团队主页:/ 项目主页:/
结果:老数据留在尾部(tail)。
2014-6-25 © 2004 - 2010 UC Mobile
16
Set时LRU
set时要为当前key分配内存 先从本slab队尾检查是否有过期数 据,共检查50条。
是否查到过期数据, 查到则淘汰1条后中止。 NO 新分配内存是否OK (是否还有可用内存)? NO 是否设置了-M参数表示不能踢 出有效数据 YES NO YES 内存分配失 败,返回出错 YES
2014-6-25 © 2004 - 2010 UC Mobile
7
分布式-客户端实现
2014-6-25 © 2004 - 2010 UC Mobile
8
分布式-一致性hash
2014-6-25 © 2004 - 2010 UC Mobile
9
内存管理-术语
2014-6-25 © 2004 - 2010 UC Mobile
2014-6-25 © 2004 - 2010 UC Mobile
6
常用优化参数
-f <factor> chunk size的增长因子(合理范围 1.05~2,默认:1.25) -t <num> memcached启动的工作线程数,默 认为4,建议不要超过系统CPU的个数。 -I <num>[k|K|m|M] 改变slab page的容量 大小,以调整ITEM容量的最大值,默认为1MB。 不能少于1024bytes(即1K),不能大 于128MB。memcached不推荐大于1MB。

memcached 手册

memcached 手册

memcached 手册Memcached是一个高性能的开源内存对象缓存系统,被广泛地应用于提升网站和应用程序性能。

该手册将介绍Memcached的基本概念、安装配置、常用命令以及最佳实践等关键内容,旨在帮助读者快速了解和使用Memcached。

一、Memcached概述Memcached可以看作是一个分布式的缓存系统,它将数据缓存在内存中,并提供了简单的键值对存取接口。

相比于传统的关系型数据库,Memcached具有更快的读写速度和更高的并发能力,因为它直接操作内存而避免了磁盘I/O。

此外,Memcached采用了多台服务器的分布式架构,能够提供横向扩展的能力。

二、安装与配置1.下载和安装:Memcached可以从官方网站或其他镜像站点下载安装包,并根据相应平台的指引进行安装。

安装完成后,可以通过运行"memcached"命令来启动Memcached服务。

2.配置文件:Memcached的默认配置文件是"memcached.conf",可以通过修改该文件中的参数来调整Memcached的行为。

主要的配置项包括监听端口、最大连接数、内存容量等。

三、常用命令1.存储数据:用"set"命令可以将键值对存入Memcached中,例如:"set key 0 3600 5"表示存储一个key为"key",值为"0",并设置过期时间为3600秒。

如果要存储的值超出了内存容量限制,旧的数据将会被替换。

2.获取数据:用"get"命令可以从Memcached中获取指定键对应的值,例如:"get key"可以获取到之前存储的值。

如果该键不存在,返回结果将是"END"。

3.删除数据:用"delete"命令可以从Memcached中删除指定键对应的值,例如:"delete key"可以删除之前存储的值。

memcached协议解析

memcached协议解析

memcached协议解析协议memcached 的客户端使⽤TCP链接与服务器通讯。

(UDP接⼝也同样有效,参考后⽂的 “UDP协议” )⼀个运⾏中的memcached服务器监视⼀些(可设置)端⼝。

客户端连接这些端⼝,发送命令到服务器,读取回应,最后关闭连接。

结束会话不需要发送任何命令。

当不再需memcached服务时,要客户端可以在任何时候关闭连接。

需要注意的是,⿎励客户端缓存这些连接,⽽不是每次需要存取数据时都重新打开连接。

这是因为memcached 被特意设计成及时开启很多连接也能够⾼效的⼯作(数百个,上千个如果需要的话)。

缓存这些连接,可以消除建⽴连接所带来的开销(/*/相对⽽⾔,在服务器端建⽴⼀个新连接的准备⼯作所带来的开销,可以忽略不计。

)。

在memcache协议中发送的数据分两种:⽂本⾏和⾃由数据。

⽂本⾏被⽤于来⾃客户端的命令和服务器的回应。

⾃由数据⽤于客户端从服务器端存取数据时。

同样服务器会以字节流的⽅式传回⾃由数据。

/*/服务器不⽤关⼼⾃由数据的字节顺序。

⾃由数据的特征没有任何限制;但是通过前⽂提到的⽂本⾏,这项数据的接受者(服务器或客户端),便能够精确地获知所发送的数据库的长度。

⽂本⾏固定以“\r\n”(回车符紧跟⼀个换⾏符)结束。

⾃由数据也是同样会以“\r\n”结束,但是 \r(回车符)、\n(换⾏符),以及任何其他8位字符,均可出现在数据中。

因此,当客户端从服务器取回数据时,必须使⽤数据区块的长度来确定数据区块的结束位置,⽽不要依据数据区块末尾的“\r\n”,即使它们固定存在于此。

键值存储在memcached中的数据通过键值来标识。

键值是⼀个⽂本字符串,对于需要存取这项数据的客户端⽽⾔,它必须是唯⼀的。

键值当前的长度限制设定为250字符(当然,客户端通常不会⽤到这么长的键);键值中不能使⽤制表符和其他空⽩字符(例如空格,换⾏等)。

命令所有命令分为3种类型:存储命令(有3项:’set’、’add’、’repalce’)指⽰服务器储存⼀些由键值标识的数据。

缓存面试题目(3篇)

缓存面试题目(3篇)

第1篇一、缓存基础知识1. 请简要介绍缓存的作用和意义。

2. 缓存有哪些类型?请分别说明它们的特点和应用场景。

3. 什么是本地缓存和分布式缓存?它们之间有什么区别?4. 什么是缓存穿透、缓存击穿和缓存雪崩?如何避免这些问题?5. 请简述缓存一致性策略,如缓存失效、缓存更新、缓存同步等。

6. 什么是缓存命中率?如何提高缓存命中率?7. 请解释缓存失效时间(TTL)的概念及其作用。

8. 什么是缓存预热和缓存冷启动?它们分别适用于哪些场景?9. 请简要介绍缓存穿透、缓存击穿和缓存雪崩的解决方案。

10. 什么是缓存中间件?常见的缓存中间件有哪些?二、一致性哈希算法1. 请解释一致性哈希算法的原理。

2. 一致性哈希算法有哪些优点和缺点?3. 在一致性哈希算法中,如何处理服务器节点增加和减少的情况?4. 请简述一致性哈希算法在Memcached中的应用。

5. 一致性哈希算法与哈希取模算法相比,有哪些优势?三、缓存中间件1. 请介绍Redis缓存的特点和优势。

2. Redis有哪些常用数据结构?请分别说明它们的特点和应用场景。

3. Redis持久化策略有哪些?请比较它们的优缺点。

4. 请解释Redis的内存淘汰策略。

5. 请简述Redis集群的原理和配置。

6. 请介绍Memcached缓存的特点和优势。

7. Memcached的哈希算法有哪些?请比较它们的优缺点。

8. 请解释Memcached的一致性哈希算法。

9. 请简述Memcached集群的原理和配置。

10. 请介绍其他缓存中间件,如Ehcache、Caffeine等,并比较它们的优缺点。

四、缓存应用场景1. 请举例说明缓存在实际项目中的应用场景。

2. 在分布式系统中,如何使用缓存提高系统性能?3. 请分析缓存在电商、社交、金融等领域的应用。

4. 请解释缓存在数据库优化中的作用。

5. 请简述缓存在搜索引擎中的应用。

五、缓存优化策略1. 请列举一些提高缓存性能的方法。

键值对数据库综述

键值对数据库综述

键值对数据库综述与典型KV数据库介绍一、键值数据库概述键值数据库是一种非关系数据库,它使用简单的键值方法来存储数据。

键值数据库将数据存储为键值对集合,其中键作为唯一标识符。

键和值都可以是从简单对象到复杂复合对象的任何内容。

键值数据库是高度可分区的,并且允许以其他类型的数据库无法实现的规模进行水平扩展。

Key-Value 键值对数据模型实际上是一个映射,即key是查找每条数据地址的唯一关键字,value是该数据实际存储的内容。

例如键值对:(“”,“张三”),其key:“”是该数据的唯一入口,而value:“张三”是该数据实际存储的内容.Key-Value 数据模型典型的是采用哈希函数实现关键字到值的映射,查询时,基于key 的hash值直接定位到数据所在的点,实现快速查询,并支持大数据量和高并发查询。

二、基本原理从API的角度来看,键值数据库是最简单的NoSQL数据库。

客户端可以根据键查询值,设置键所对应的值,或从数据库中删除键。

“值”只是数据库存储的一块数据而已,它并不关心也无需知道其中的内容;应用程序负责理解所存数据的含义。

由于键值数据库总是通过主键访问,所以它们一般性能较高,且易于扩展。

基本上所有的编程语言都带有应用在内存中的键值对存储。

C++STL的映射容器(map container)和Java的HashMap以及Python的字典类型都是键值对存储。

键值对存储通常都有如下接口:-Get( key ): 获取之前存储于某标示符“key”之下的一些数据,或者“key”下没有数据时报错。

-Set( key, value ): 将“value”存储到存储空间中某标示符“key”下,使得我们可以通过调用相同的“key”来访问它。

如果“key”下已经有了一些数据,旧的数据将被替换。

-Delete( key ): 删除存储在“key”下的数据。

三、基本特性键值数据库具有以下几个特性:v1.0 可编辑可修改-容错性-可扩展性-有效性四、读写方式分析已有key-value 数据库,其读写方式可分为面向磁盘的读写方式和面向内存的读写方式两种.后者适合于不要求存储海量的数据但需要对特定的数据进行高速并发访问的场景.采用哪一种读写方式,通常由数据量的大小和对访问速度的要求决定的。

哈 希 常 见 算 法 及 原 理

分布式缓存中的一致性哈希算法,这篇文章给讲透了!一致性哈希算法在分布式缓存领域的 MemCached,负载均衡领域的Nginx 以及各类 RPC 框架中都有广泛的应用它主要是为了解决传统哈希函数添加哈希表槽位数后要将关键字重新映射的问题。

本文会介绍一致性哈希算法的原理及其实现,并给出其不同哈希函数实现的性能数据对比,探讨Redis 集群的数据分片实现等,文末会给出实现的具体 github 地址。

一、Memcached 与客户端分布式缓存Memcached 是一个高性能的分布式缓存系统,然而服务端没有分布式功能,各个服务器不会相互通信。

它的分布式实现依赖于客户端的程序库,这也是 Memcached 的一大特点。

比如第三方的 spymemcached 客户端就基于一致性哈希算法实现了其分布式缓存的功能。

其具体步骤如下:向 Memcached 添加数据,首先客户端的算法根据 key 值计算出该key 对应的服务器。

服务器选定后,保存缓存数据。

获取数据时,对于相同的 key ,客户端的算法可以定位到相同的服务器,从而获取数据。

在这个过程中,客户端的算法首先要保证缓存的数据尽量均匀地分布在各个服务器上,其次是当个别服务器下线或者上线时,会出现数据迁移,应该尽量减少需要迁移的数据量。

客户端算法是客户端分布式缓存性能优劣的关键。

普通的哈希表算法一般都是计算出哈希值后,通过取余操作将 key 值映射到不同的服务器上,但是当服务器数量发生变化时,取余操作的除数发生变化,所有 key 所映射的服务器几乎都会改变,这对分布式缓存系统来说是不可以接收的。

一致性哈希算法能尽可能减少了服务器数量变化所导致的缓存迁移。

二、哈希算法首先,一致性哈希算法依赖于普通的哈希算法。

大多数同学对哈希算法的理解可能都停留在 JDK 的 hashCode 函数上。

其实哈希算法有很多种实现,它们在不同方面都各有优劣,针对不同的场景可以使用不同的哈希算法实现。

memcached技术-韩顺平

memcached技术第 1 章MEMCACHED是什么 (1)1.1MEMCACHED的历史1 1.2MEMCACHED的运行原理1 1.3MEMCACHED的安装11.3.1windows下的安装步骤 (2)1.3.2Liunx下安装memcached步骤 (3)第 2 章对MEMCACHED进行操作(CRUD) (5)2.1通过TELNET操作MEM5 2.2 7 2.3通过PHP程序对MEMCACHED进行操作(通过DLL扩展) 7 2.4如何实现WINDOWS 操作LINUX下的MEM12 2.5MEMCACHED最佳实践12 2.6使用源码对MEMCACHED操作13第 3 章MEMCACHED的机制了解 (14)3.1MEMCACHED是基于C/S的架构,协议是文本协议14 3.2MEMCACHED是使用LIBEVENT处理并发14 3.3MEMCACHED是内存存储数据,当MEM重启,或者操作系统重新,数据消失,当数据满后,再放入数据,则使用LRU算法(最近最少使用),对数据置换. 14 3.4MEMCACHED是基于客户端分布式的系统15第 4 章MEMCACHED的细节说明 (17)4.1MEMCACHED的数据生命周期17 4.2S ESSION数据放入到M EMCACHED17 4.3MEMCACHED的安全性讨论18 4.4什么数据放入到MEMCACHED提示19第 1 章memcached是什么概述: memcached就是一个高性能的支持分布式的内存存储系统(软件)。

你可以把它看成一个巨大的hash表: 结构key(键) value(值)字符串(唯一) 整数,浮点数,字符串,布尔,数组,对象,null,二进制数据(视频,音频,图片)1.1memcached的历史国外livejoural 网站,开发memcached软件.=>很多大型网站都开始使用。

memcached 是各种开发程序使用比如php,,jsp网站Memcached是一个高性能的分布式的内存对象缓存系统,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。

缓存服务器梳理(一)

缓存服务器梳理(⼀)⼀、概述主要功能:应⽤解耦,异步消息,流量削锋等问题架构设计:实现⾼性能,⾼可⽤,可伸缩和最终⼀致性架构常⽤消息队列:ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ使⽤场景:1)RabbitMQ:对数据⼀致性、稳定性和可靠性要求很⾼的场景,对性能和吞吐量的要求还在其次(集群不能动态扩展)2)RocketMQ:具有⾼吞吐量、⾼可⽤性、适合⼤规模分布式系统应⽤的特点(⽀持的语⾔较少,语⾔⽀持的情况下优先选择)3)Kafka:基于Pull的模式来处理消息消费,追求⾼吞吐量,适合产⽣⼤量数据的互联⽹服务的数据收集业务(多数⽤于处理⽇志)⼆、核⼼功能理解解耦:⼀个事务,只关⼼核⼼的流程。

⽽需要依赖其他系统但不那么重要的事情,有通知即可,⽆需等待结果异步消息:⼀致性:保证消息的可靠性1)强⼀致性:2)最终⼀致性:主要是⽤“记录”和“补偿”的⽅式。

在做所有的不确定的事情之前,先把事情记录下来,然后去做不确定的事情,结果可能是:成功、失败或是不确定,“不确定”(例如超时等)可以等价为失败。

成功就可以把记录的东西清理掉了,对于失败和不确定,可以依靠定时任务等⽅式把所有失败的事情重新执⾏⼀遍,直到成功为⽌三、使⽤总结1.消息队列不是万能的,对于需要强事务保证⽽且延迟敏感的,RPC是优于消息队列的。

2.对于⼀些⽆关痛痒,或者对于别⼈⾮常重要但是对于⾃⼰不是那么关⼼的事情,可以利⽤消息队列去做。

3.⽀持最终⼀致性的消息队列,能够⽤来处理延迟不那么敏感的“分布式事务”场景,⽽且相对于笨重的分布式事务,可能是更优的处理⽅式。

4.当上下游系统处理能⼒存在差距的时候,利⽤消息队列做⼀个通⽤的“漏⽃”,在下游有能⼒处理的时候,再进⾏分发。

⼀、概述原理:1)将数据写⼊/读取速度更快的存储(设备)2)将数据缓存到离应⽤最近的位置3)将数据缓存到离⽤户最近的位置缓存分类1)CDN缓存2)反向代理缓存3)分布式Cache4)本地应⽤缓存缓存媒介1)常⽤中间件:Varnish,Ngnix,Squid,Memcache,Redis,Ehcache等2)缓存的内容:⽂件,数据,对象3)缓存的介质:CPU,内存(本地,分布式),磁盘(本地,分布式)缓存设计1)缓存的内容:1.热点数据;2.静态资源2)缓存的位置:CDN,反向代理,分布式缓存服务器,本机(内存,硬盘)缓存策略1)过期策略:(1)固定时间:⽐如指定缓存的时间是30分钟;(2)相对时间:⽐如最近10分钟内没有访问的数据;2)同步机制:(1)实时写⼊;(2)异步刷新缓存的⽬的:将热点数据放到离⽤户最近或访问速度更快的介质中,加快数据的访问,减⼩响应时间⼆、CDN缓存原理:CDN的基本原理是⼴泛采⽤各种缓存服务器,将缓存服务器分布到⽤户访问相对集中的地区或⽹络中,在⽤户访问⽹站时,利⽤全局负载技术将⽤户的访问指向距离最近的⼯作正常的缓存服务器上,由缓存服务器直接响应⽤户请求CDN主要解决将数据缓存到离⽤户最近的位置,⼀般缓存静态资源⽂件(页⾯,脚本,图⽚,视频,⽂件等)。

第5-6节 伪静态(rewrite)重写技术

首先将虚拟目录中的 AllowOverride None 修改为: AllowOverride All,让其加载目录下的.htaccess文件, 并且遵循里面定义的规则
mod_rewrite 规则的使用
<IfModule rewrite_module> RewriteEngine on #开启rewrite RedirectMatch ^(.*)/([^/]*)\.html$ $1/ind ex.php?class=$2 </IfModule> 上面中的 RedirectMatch 后面跟的正则表达式会 匹配 /0809java.html然 后转换为 /index.php?cla ss=0809java
总结
Rewrite优势 mod_rewrite 配置 mod_rewrite 规则的使用 mod_rewrite 规则修正符

案例扩展
如何使用rewrite防止图片的盗链
5个问题
URL重写的优势是什么? 如何配置mod_rewrite? 简单的写个rewrite 规则 常见的mod_rewrite 规则修正符有哪些?
Mod_rewrite模块介绍和配置 模块介绍和配置
Apache中的Mod_rewrite模块提供了一个基 于正则表达式分析器的重写引擎来实时重写UR L请求。它支持每个完整规则可以拥有不限数量 的子规则以及附加条件规则的灵活而且强大的 URL操作机制。 此模块可以操作URL的所有部分(包括路径信息 URL ( 部分),在服务器级的(httpd.conf)和目录级的 (.htaccess)配置都有效,还可以生成最终请求 字符串。此重写操作的结果可以是内部子处理, 也可以是外部请求的转向,甚至还可以是内部 代理处理。
第5-6节 节
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

11
Memcached介绍
数据存储方式:Slab Allocation
Slab Classes 分配图
Page:分配给Slab的内存空间,默认是 1MB。分配给Slab之后根据slab的大小 切分成chunk。
Chunk:用于缓存记录的内存空间。 Slab Class:特定大小的chunk的组。
memcached根据收到的数据的大小,选 择最适合数据大小的slab。 memcached中保存着slab内空闲chunk的 列表,根据该列表选择chunk,然后将 数据缓存于其中。
安装步骤: • 先安装 libevent • 再安装 Memcached 主程序
源码下载:(最新版)
libevent官网:/~provos/libevent/ libevent下载:/~provos/libevent-1.4.9-stable.tar.gz Memcached官网:/memcached Memcached下载:/memcached/dist/memcached-1.2.6.tar.gz
19
Memcached安装和使用:
Memcached 安装
• 安装 libevent
# tar zxvf libevent-1.4.9-stable.tar.gz # cd libevent-1.4.9-stable # ./configure --prefix=/usr # make # make install
运行 Memcached
目标:使用11211端口、hualiangxie用户、最大占用512M内存、1024个软连接,输出客 户端请求,以守护进程方式运行 # /usr/local/bin/memcached -p 11211 -d -u hualiangxie -m 512 -c 1024 -vvv
数字加减
set key2 0 180 4 1234 STORED incr key2 3 1237 get key2 VALUE key2 0 4 1237 END decr key2 1 1236 get key2 VALUE key2 0 4 1236 END
25
Memcached安装和使用:
12
Memcached介绍:
数据存储方式:Slab Allocation
Slab Alloction 缺点
这个问题就是,由于分配的是特定长度的内存,因此无法有效利用 分配的内存。例如,将100字节的数据缓存到128字节的chunk中,剩 余的28字节就浪费了。
13
Memcached介绍:
数据过期方式
•自主内存存储处理
•基于客户端的Memcached分布式
7
Memcached介绍
基于C/S架构,协议简单
8
Memcached介绍
基于libevent的事件处理
libevent是一套跨平台的事件处理接口的封装,能够兼容包括这些操作系统: Windows/Linux/BSD/Solaris 等操作系统的的事件处理。
3
Memcached介绍
Memcached运行图
4
MemcachedBiblioteka 绍谁在用Memcached?
国外
国内
5
Memcached介绍
与Memcached类似的还有什么?
国外 Tokyo Cabinet:/index.html (日本 mixi.jp公司开发)
14
Memcached介绍:
基于客户端的Memcached分布式
15
Memcached介绍:
基于客户端的Memcached分布式
//按照Key值,获取一个服务器ID int getServerId(char *key, int serverTotal) { int c, hash = 0; while (c = *key++) { hash += c; } return hash % serverTotal; }
• Lazy Expiration memcached内部不会监视记录是否过期,而是在get时查看记录的时间戳,检查记录是否过 期。这种技术被称为lazy(惰性)expiration。因此,memcached不会在过期监视上耗费 CPU时间。
• LRU memcached会优先使用已超时的记录的空间,但即使如此,也会发生追加新记录时空间不 足的情况,此时就要使用名为 Least Recently Used(LRU)机制来分配空间。顾名思义, 这是删除“最近最少使用”的记录的机制。因此,当memcached的内存空间不足时(无法 从slab class 获取到新的空间时),就从最近未被使用的记录中搜索,并将其空间分配 给新的记录。从缓存的实用角度来看,该模型十分理想。
Memcached是国外社区网站 LiveJournal 的开发团队开发的高性能的分布式内 存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访 问次数,以提高动态Web应用的速度、提高可扩展性。
LiveJournal 团队开发了包括 Memcached、MogileFS、Perlbal 等不错的开 源项目。 官方网站:/memcached/
# telnet localhost 11211 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. stats STAT pid 4402 STAT uptime 1032 STAT time 1231155683 STAT version 1.2.6 STAT pointer_size 32 ... END
24
Memcached安装和使用:
Memcached 基本协议
数据存取
set key1 0 180 3 abc STORED add key1 0 180 3 xyz NOT_STORED get key1 VALUE key1 0 3 abc END replace key1 0 180 3 xyz STORED get key1 VALUE key1 0 3 xyz END delete key1 DELETED
16
Memcached介绍:
基于客户端的Memcached分布式
写入操作 读取操作
17
Memcached安装和使用:
• Memcached 安装
• Memcached 与 PHP 结合使用 • Memcached 与 C/C++ 结合使用
18
Memcached安装和使用:
Memcached 安装
23
Memcached安装和使用:
Memcached 运行
检查是否正常启动
# pa auxxww | grep memcached 1001 4402 0.0 0.0 2296 900 pts/0 root 4547 0.0 0.0 1892 668 pts/3 S+ 19:24 0:00 /usr/local/bin/memcached -u hualiangxie S+ 19:42 0:00 grep memcached
Memcached 和 PHP 结合使用
安装 PHP Memcache 扩展
扩展官网:/package/memcache 扩展下载:/get/memcache-2.2.4.tgz Memcache扩展安装:
# tar zxvf memcache-2.2.4.tgz # cd memcache-2.2.4 # /usr/local/php/bin/phpize # ./configure --with-php-config=/usr/local/php/bin/php-config # make # make install 配置 # ls -l /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/memcache.so # vim /usr/local/php/lib/php.ini 新增配置内容: extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/" extension = memcache.so
• 安装 Memcached
# tar zxvf memcached-1.2.6.tar.gz # cd memcached-1.2.6 # ./configure --prefix=/usr/local # make # make install
20
Memcached安装和使用:
Memcached 运行
包装的接口包括: poll、select(Windows)、epoll(Linux)、kqueue(BSD)、/dev/pool(Solaris) Memcached 使用libevent来进行网络并发连接的处理,能够保持在很大并发情 况下,仍旧能够保持快速的响应能力。 libevent: /~provos/libevent/
9
Memcached介绍
自主的内存存储处理
• 数据存储方式:Slab Allocation • 数据过期方式:Lazy Expiration + LRU
10
Memcached介绍
数据存储方式:Slab Allocation
Slab Alloction 构造图 Slab Allocator的基本原理是按照预先 规定的大小,将分配的内存分割成特定 长度的块,以完全解决内存碎片问题。 Slab Allocation的原理相当简单。 将 分配的内存分割成各种尺寸的块 (chunk),并把尺寸相同的块分成组 (chunk的集合)
关注基本选项
-p <num> -d -u <username> -m <num> -c <num> -v -vv -h -i 监听的TCP端口 (缺省: 11211) 以守护进程方式运行Memcached 运行Memcached的账户,非root用户 最大的内存使用, 单位是MB,缺省是 64 MB 软连接数量, 缺省是 1024 输出警告和错误信息 打印客户端的请求和返回信息 打印帮助信息 打印memcached和libevent的版权信息
相关文档
最新文档