本文是基于网上资料和自己的理解整理的学习笔记,中间涉及的网络资料,我在文档后的参考统一列举。如果我的某些理解有误,望谅解,并希望得到你的回复。
什么是
memcached
在许多高并发的应用中,把业务数据保持久化
(
保存到数据库,磁盘文件或其它
)
后,应用从持久化设备中读取数据并在浏览器中显示,随用户量,数据量增大,访问的集中,会出现持久化设备负担过重(典型的就是数据库),影响应用响应速度,应用延迟严重等重大问题。典型的应用就是
WEB
应用中的高并发网站。
这时候应用就需要一种缓存机制来提高并发读取速度的性能
,
memcached
能在大中型系统中提供优秀的缓存服务。
memcached
是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态
Web
应用的速度、提高可扩展性。
memcached
是以
LiveJournal
旗下
Danga Interactive
公司的
Brad Fitzpatric
为首开发的一款软件。现在已成为
mixi
、
hatena
、
Facebook
、
Vox
、
LiveJournal
等众多服务中提高
Web
应用扩展性的重要因素。
官方网站:
http://memcached.com
Memcached
的原理和功能如下图:
这图片是网上找的,后面有引用地址,画的很贴切,本想自己画个,但是想了下,自己画来也差不多,就懒了。。。
memcached
特点
协议简单
memcached
的服务器客户端通信并不使用复杂的
XML
等格式,
而使用简单的基于文本行的协议。因此,通过
telnet
也能在
memcached
上保存数据、取得数据。下面是官方的例子:
$ telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
set foo 0 0 3
(保存命令)
bar
(数据)
STORED
(结果)
get foo
(取得命令)
VALUE foo 0 3
(数据)
bar
(数据)
协议文档位于
memcached
的源代码内,也可以参考以下的
URL
。
http://code.sixapart.com/svn/memcached/trunk/server/doc/protocol.txt
命令介绍请参考后续介绍
基于
libevent
的事件处理
libevent
是个程序库,它将
Linux
的
epoll
、
BSD
类操作系统的
kqueue
等事件处理功能
封装成统一的接口。即使对服务器的连接数增加,也能发挥
O(1)
的性能。
memcached
使用这个
libevent
库,因此能在
Linux
、
BSD
、
Solaris
等操作系统上发挥其高性能。
关于事件处理这里就不再详细介绍,可以参考
Dan
Kegel
的
The C10K Problem
。
libevent: http://www.monkey.org/~provos/libevent/
The C10K Problem: http://www.kegel.com/c10k.html
内存缓存机制
为了提高性能,
memcached
中保存的数据都存储在
memcached
内置的内存存储空间中。
由于数据仅存在于内存中,因此重启
memcached
、重启操作系统会导致全部数据消失。
另外,内容容量达到指定值之后,就基于
LRU(Least
Recently Used)
算法自动删除不使用的缓存。
memcached
本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题。
关于内存缓存机制和模型请参考后续介绍。
客户端实现分布式
memcached
尽管是
“
分布式
”
缓存服务器,但服务器端并没有分布式功能。
各个
memcached
不会互相通信以共享信息。那么,怎样进行分布式呢?
这完全取决于客户端的实现。本连载也将介绍
memcached
的分布式。
- 大小: 138.3 KB
分享到:
相关推荐
本篇学习笔记将重点介绍如何在Java环境中使用gwhalin提供的Memcached客户端进行开发。gwhalin的Memcached Java客户端是一个轻量级、高性能的库,使得Java开发者可以轻松地与Memcached服务器进行交互。 ### 一、...
1. 第一范式(1NF):这是关系型数据库的基础,要求每个字段都不可再分,即每一列都是原子性的。避免在同列中存储多个值,确保数据的最小化。如果发现某列有重复属性,应当创建新的实体,用一对多关系与原实体关联。...
在PHP的基础部分,1php基础文件着重介绍了PHP语言的基本语法,包括变量声明、数据类型、流程控制(如if-else,switch-case)、函数的使用以及字符串和数组的操作等。这是学习PHP的第一步,也是所有后续进阶知识的...
### 第一阶段:Linux基础 - **开班课程介绍**:了解课程安排、学习目标及预期成果。 - **规章制度介绍**:熟悉课堂规则、学习纪律等。 - **破冰活动**:增进同学间的相互了解。 - **Linux硬件基础/Linux发展历史**...
通过这份"乐优商城笔记",开发者可以学习到一个完整的电商系统从设计到实现的全过程,涵盖从后端开发到前端展示,再到部署运维的诸多环节,对提升个人在全栈开发领域的专业能力具有极大的价值。
通过学习《网上商城实战笔记》,开发者可以系统地学习以上各个方面的知识,并通过源码实践加深理解,从而具备独立构建并维护一个网上商城系统的能力。这不仅对个人技能提升有极大帮助,也为未来的职业发展奠定了坚实...
1. **MVC架构**:大部分Java商城系统采用Model-View-Controller(MVC)设计模式,它将业务逻辑、用户界面和数据控制分离,使得代码结构清晰,易于维护。 2. **Spring框架**:Spring是Java企业级应用的核心框架,...
- **Memcached**:一种内存键值存储系统,常用于存储session数据,Nginx可以配置为通过memcached与后端服务器通信,确保session在所有服务器间的同步。 - **Session ID与哈希策略**:通过特定的哈希算法(如IP哈希...
1. **论文.doc** - 这可能是一份详细阐述项目背景、目标、设计思路和技术实现的学术论文,对于理解整个系统的架构和设计理念非常有帮助。 2. **pptspringboot049在线教育系统.pptx** - 很可能是项目介绍或演示的PPT...
1. **.NET框架**:学习.NET,首先要了解.NET Framework的基础,包括CLR(Common Language Runtime)和类库,它们为开发各种应用程序提供支持。 2. **C#语言**:作为.NET的主要编程语言,C#的学习至关重要,包括语法...
1. **基础概念** - **MVC(Model-View-Controller)架构**:DJango遵循MVT模式(Model-View-Template),其中Model负责数据处理,View处理逻辑,Template渲染视图。 - **URL路由系统**:通过URLconf将URL映射到...
【描述】虽然描述信息较为简略,但可以推测该压缩包可能包含两部分教程或笔记,即"Spring Boot快速集成第三方技术详解(1).vep"和"Spring Boot快速集成第三方技术详解(2).vep"。这两份文件很可能提供了详细的步骤...
【描述】"springboot034在线商城系统设计与开发-代码" 提供的信息有限,但可以推测这是一个教学项目或课程的一部分,编号"034"可能是课程或系列教程中的一个序列号。这个项目涵盖了在线商城系统的开发,涉及用户管理...
2. **环境搭建**:讲解如何配置PHP运行环境,安装并设置ThinkPHP框架,以及创建第一个“Hello, World!”项目。 3. **路由与控制器**:详细介绍ThinkPHP的路由规则和控制器设计,如何处理HTTP请求并返回响应。 4. *...
"MySQL数据库开发规范_v1.0.docx"和"MySQL_第二版中文版.pdf"则为学习和应用MySql提供了基础。MySql是另一种广泛使用的开源关系型数据库管理系统,尤其适合Web应用程序。开发规范文档可能包含如何编写整洁、可维护的...
Memcached和Lucene笔记 110 使用开源软件,设计高性能可扩展网站 110 面向高负载的架构Lighttpd+PHP(FastCGI)+Memcached+Squid 113 思考高并发高负载网站的系统架构 113 "我在SOHU这几年做的一些...
1. **Swoole协程基础**:Hyperf依赖于Swoole协程库,这是一个C语言编写的PHP扩展,实现了异步非阻塞I/O模型,通过协程(Coroutine)技术,使得PHP可以实现低延迟、高并发的网络编程。Swoole协程避免了传统多线程、多...