当前位置:文档之家› memcached完全剖析(1-5)整理

memcached完全剖析(1-5)整理

memcached完全剖析(1-5)整理
memcached完全剖析(1-5)整理

memcached全面剖析

作者:长野雅广(Masahiro Nagano)

作者:前坂徹(Toru Maesaka)

翻译:charlee

整理:yaykey

发表时间:2008/07/02‐2008/07/30

翻译时间:2008/07/10‐2008/07/31

整理时间:2010/11/09

原文链接:

http://gihyo.jp/dev/feature/01/memcached/0001 http://gihyo.jp/dev/feature/01/memcached/0002 http://gihyo.jp/dev/feature/01/memcached/0003 http://gihyo.jp/dev/feature/01/memcached/0004 http://gihyo.jp/dev/feature/01/memcached/0005

译文地址:

?第1次:https://www.doczj.com/doc/fa15498045.html,/2008/07/10/memcached‐001/ ?第2次:https://www.doczj.com/doc/fa15498045.html,/2008/07/11/memcached‐002/ ?第3次:https://www.doczj.com/doc/fa15498045.html,/2008/07/16/memcached‐003/ ?第4次:https://www.doczj.com/doc/fa15498045.html,/2008/07/24/memcached‐004/ ?第5次:https://www.doczj.com/doc/fa15498045.html,/2008/07/31/memcached‐005/

2 / 81

目录

1. memcached完全剖析–1. memcached的基础 (5)

1.1. memcached是什么? (7)

1.2. memcached的特征 (9)

1.2.1. 协议简单 (9)

1.2.2. 基于libevent的事件处理 (9)

1.2.3. 内置内存存储方式 (10)

1.2.4. memcached不互相通信的分布式 (10)

1.3. 安装memcached (11)

1.3.1. memcached的安装 (11)

1.3.2. memcached的启动 (12)

1.4. 用客户端连接 (13)

1.5. 使用Cache::Memcached (15)

1.5.1. 使用Cache::Memcached连接memcached (16)

1.5.2. 保存数据 (17)

1.5.3. 获取数据 (17)

1.5.4. 删除数据 (17)

1.5.5. 增一和减一操作 (18)

1.6. 总结 (19)

2. memcached全面剖析–2.理解memcached的内存存储 (21)

2.1. Slab Allocation机制:整理内存以便重复使用 (23)

2.1.1. Slab Allocation的主要术语 (24)

2.1.1.1. Page (24)

2.1.1.2. Chunk (24)

2.1.1.3. Slab Class (24)

2.2. 在Slab中缓存记录的原理 (25)

2.3. Slab Allocator的缺点 (27)

2.4. 使用Growth Factor进行调优 (29)

2.5. 查看memcached的内部状态 (31)

2.6. 查看slabs的使用状况 (33)

2.7. 内存存储的总结 (35)

3. memcached全面剖析–3.memcached的删除机制和发展方向 (37)

3.1. memcached在数据删除方面有效利用资源 (39)

3.1.1. 数据不会真正从memcached中消失 (39)

3.1.2. Lazy Expiration (39)

3.2. LRU:从缓存中有效删除数据的原理 (41)

3.3. memcached的最新发展方向 (43)

3.3.1. 关于二进制协议 (43)

3.3.2. 二进制协议的格式 (43)

3.3.3. HEADER中引人注目的地方 (45)

3.4. 外部引擎支持 (47)

3 / 81

3.4.1. 外部引擎支持的必要性 (47)

3.4.2. 简单API设计的成功的关键 (48)

3.4.3. 重新审视现在的体系 (49)

3.5. 总结 (51)

4. memcached全面剖析–4. memcached的分布式算法 (53)

4.1. memcached的分布式 (55)

4.1.1. memcached的分布式是什么意思? (55)

4.2. Cache::Memcached的分布式方法 (59)

4.2.1. 根据余数计算分散 (59)

4.2.2. 根据余数计算分散的缺点 (60)

4.3. Consistent Hashing (63)

4.3.1. Consistent Hashing的简单说明 (63)

4.3.2. 支持Consistent Hashing的函数库 (65)

4.4. 总结 (67)

5. memcached全面剖析–5. memcached的应用和兼容程序 (69)

5.1. mixi案例研究 (71)

5.1.1. 服务器配置和数量 (71)

5.1.2. memcached进程 (72)

5.1.3. memcached使用方法和客户端 (72)

5.1.3.1. 通过Cache::Memcached::Fast维持连接 (73)

5.1.3.2. 公共数据的处理和rehash (74)

5.2. memcached应用经验 (75)

5.2.1. 通过daemontools启动 (75)

5.2.2. 监视 (76)

5.2.3. memcached的性能 (77)

5.3. 兼容应用程序 (79)

5.3.1. Tokyo Tyrant案例 (79)

5.4. 总结 (81)

4 / 81

memcached完全剖析–1. memcached的基础1.memcached完全剖析–1. memcached的基础

翻译一篇技术评论社的文章,是讲memcached的连载。fcicq同学说这个东西很有用,希望大家喜欢。

发表日:2008/7/2

作者:长野雅广(Masahiro Nagano)

原文链接:http://gihyo.jp/dev/feature/01/memcached/0001

我是mixi株式会社开发部系统运营组的长野。 日常负责程序的运营。从今天开始,将分几次针对最近在Web应用的可扩展性领域 的热门话题memcached,与我公司开发部研究开发组的前坂一起, 说明其内部结构和使用。

?memcached是什么?

?memcached的特征

o协议简单

o基于libevent的事件处理

o内置内存存储方式

o memcached不互相通信的分布式

?安装memcached

o memcached的安装

o memcached的启动

?用客户端连接

?使用Cache::Memcached

o使用Cache::Memcached连接memcached

o保存数据

o获取数据

o删除数据

o增一和减一操作

?总结

5 / 81

memcached完全剖析–1. memcached的基础 6 / 81

memcached完全剖析–1. memcached的基础1.1.memcached是什么?

memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款软件。现在已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素。

许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、网站显示延迟等重大影响。

这时就该memcached大显身手了。memcached是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。

图1 一般情况下memcached的用途

7 / 81

memcached完全剖析–1. memcached的基础 8 / 81

memcached完全剖析–1. memcached的基础1.2.memcached的特征

memcached作为高速运行的分布式缓存服务器,具有以下的特点。

?协议简单

?基于libevent的事件处理

?内置内存存储方式

?memcached不互相通信的分布式

1.2.1.协议简单

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。

?https://www.doczj.com/doc/fa15498045.html,/svn/memcached/trunk/server/doc/protocol.tx t

1.2.2.基于libevent的事件处理

libevent是个程序库,它将Linux的epoll、BSD类操作系统的kqueue等事件处理功能封装成统一的接口。即使对服务器的连接数增加,也能发挥O(1)的性能。memcached使用这个libevent库,因此能在Linux、BSD、Solaris等操作系统上发挥其高性能。关于事件处理这里就不再详细介绍,可以参考Dan Kegel 的The C10K Problem。

?libevent: https://www.doczj.com/doc/fa15498045.html,/~provos/libevent/

?The C10K Problem: https://www.doczj.com/doc/fa15498045.html,/c10k.html

9 / 81

memcached 完全剖析–1. memcached 的基础

10 / 81

1.2.3. 内置内存存储方式

为了提高性能,memcached 中保存的数据都存储在memcached 内置的内存存储空间中。由于数据仅存在于内存中,因此重启memcached、重启操作系统会导致全部数据消失。另外,内容容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。memcached 本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题。关于内存存储的详细信息,本连载的第二讲以后前坂会进行介绍,请届时参考。

1.2.4. m emcached 不互相通信的分布式

memcached 尽管是“分布式”缓存服务器,但服务器端并没有分布式功能。各个memcached 不会互相通信以共享信息。那么,怎样进行分布式呢?这完全取决于客户端的实现。本连载也将介绍memcached

的分布式。

图2 memcached 的分布式

接下来简单介绍一下memcached 的使用方法。

memcached完全剖析–1. memcached的基础1.3.安装memcached

memcached的安装比较简单,这里稍加说明。

memcached支持许多平台。

?Linux

?FreeBSD

?Solaris (memcached 1.2.5以上版本)

?Mac OS X

另外也能安装在Windows上。这里使用Fedora Core 8进行说明。

1.3.1.m emcached的安装

运行memcached需要本文开头介绍的libevent库。Fedora 8中有现成的rpm包,通过yum命令安装即可。

$ sudo yum install libevent libevent-devel

memcached的源代码可以从memcached网站上下载。本文执笔时的最新版本为1.2.5。 Fedora 8虽然也包含了memcached的rpm,但版本比较老。因为源代码安装并不困难,这里就不使用rpm了。

?下载memcached:https://www.doczj.com/doc/fa15498045.html,/memcached/download.bml memcached安装与一般应用程序相同,configure、make、make install就行了。

$ wget https://www.doczj.com/doc/fa15498045.html,/memcached/dist/memcached-1.2.5.tar.gz $ tar zxf memcached-1.2.5.tar.gz

$ cd memcached-1.2.5

$ ./configure

$ make

$ sudo make install

默认情况下memcached安装到/usr/local/bin下。

11 / 81

memcached完全剖析–1. memcached的基础

1.3.

2.m emcached的启动

从终端输入以下命令,启动memcached。

$ /usr/local/bin/memcached -p 11211 -m 64m -vv

slab class 1: chunk size 88 perslab 11915

slab class 2: chunk size 112 perslab 9362

slab class 3: chunk size 144 perslab 7281

中间省略

slab class 38: chunk size 391224 perslab 2

slab class 39: chunk size 489032 perslab 2

<23 server listening

<24 send buffer was 110592, now 268435456

<24 server listening (udp)

<24 server listening (udp)

<24 server listening (udp)

<24 server listening (udp)

这里显示了调试信息。这样就在前台启动了memcached,监听TCP端口11211最大内存使用量为64M。调试信息的内容大部分是关于存储的信息,下次连载时具体说明。

作为daemon后台启动时,只需

$ /usr/local/bin/memcached -p 11211 -m 64m -d

这里使用的memcached启动选项的内容如下。

选项 说明

-p 使用的TCP端口。默认为11211

-m 最大内存大小。默认为64M

-vv 用very vrebose模式启动,调试信息和错误输出到控制台

-d 作为daemon在后台启动

上面四个是常用的启动选项,其他还有很多,通过

$ /usr/local/bin/memcached -h

命令可以显示。许多选项可以改变memcached的各种行为,推荐读一读。

12 / 81

memcached完全剖析–1. memcached的基础1.4.用客户端连接

许多语言都实现了连接memcached的客户端,其中以Perl、PHP为主。仅仅memcached网站上列出的语言就有

?Perl

?PHP

?Python

?Ruby

?C#

?C/C++

?Lua

等等。

?memcached客户端API:https://www.doczj.com/doc/fa15498045.html,/memcached/apis.bml

这里介绍通过mixi正在使用的Perl库链接memcached的方法。

13 / 81

memcached完全剖析–1. memcached的基础 14 / 81

memcached完全剖析–1. memcached的基础1.5.使用Cache::Memcached

Perl的memcached客户端有

?Cache::Memcached

?Cache::Memcached::Fast

?Cache::Memcached::libmemcached

等几个CPAN模块。这里介绍的Cache::Memcached是memcached的作者Brad Fitzpatric的作品,应该算是memcached的客户端中应用最为广泛的模块了。

?Cache::Memcached -

https://www.doczj.com/doc/fa15498045.html,: https://www.doczj.com/doc/fa15498045.html,/dist/Cache-Memcached/

15 / 81

memcached完全剖析–1. memcached的基础

1.5.1.使用Cache::Memcached连接memcached

下面的源代码为通过Cache::Memcached连接刚才启动的memcached的例子。

#!/usr/bin/perl

use strict;

use warnings;

use Cache::Memcached;

my $key = "foo";

my $value = "bar";

my $expires = 3600; # 1 hour

my $memcached = Cache::Memcached->new({

servers => ["127.0.0.1:11211"],

compress_threshold => 10_000

});

$memcached->add($key, $value, $expires);

my $ret = $memcached->get($key);

print "$ret\n";

在这里,为Cache::Memcached指定了memcached服务器的IP地址和一个选项,以生成实例。Cache::Memcached常用的选项如下所示。

选项 说明

servers 用数组指定memcached服务器和端口

compress_threshold 数据压缩时使用的值

namespace 指定添加到键的前缀

另外,Cache::Memcached通过Storable模块可以将Perl的复杂数据序列化之后再保存,因此散列、数组、对象等都可以直接保存到memcached中。

16 / 81

memcached完全剖析–1. memcached的基础1.5.2.保存数据

向memcached保存数据的方法有

?add

?replace

?set

它们的使用方法都相同:

my $add = $memcached->add( '键', '值', '期限' );

my $replace = $memcached->replace( '键', '值', '期限' );

my $set = $memcached->set( '键', '值', '期限' );

向memcached保存数据时可以指定期限(秒)。不指定期限时,memcached按照LRU 算法保存数据。这三个方法的区别如下:

选项 说明

add 仅当存储空间中不存在键相同的数据时才保存

replace 仅当存储空间中存在键相同的数据时才保存

set 与add和replace不同,无论何时都保存

1.5.3.获取数据

获取数据可以使用get和get_multi方法。

my $val = $memcached->get('键');

my $val = $memcached->get_multi('键1', '键2', '键3', '键4', '键5');

一次取得多条数据时使用get_multi。get_multi可以非同步地同时取得多个键值,其速度要比循环调用get快数十倍。

1.5.4.删除数据

删除数据使用delete方法,不过它有个独特的功能。

$memcached->delete('键', '阻塞时间(秒)');

删除第一个参数指定的键的数据。第二个参数指定一个时间值,可以禁止使用同样的键保存新数据。此功能可以用于防止缓存数据的不完整。但是要注意,set 函数忽视该阻塞,照常保存数据

17 / 81

memcached完全剖析–1. memcached的基础

1.5.5.增一和减一操作

可以将memcached上特定的键值作为计数器使用。

my $ret = $memcached->incr('键');

$memcached->add('键', 0) unless defined $ret;

增一和减一是原子操作,但未设置初始值时,不会自动赋成0。因此,应当进行错误检查,必要时加入初始化操作。而且,服务器端也不会对超过232时的行为进行检查。

18 / 81

memcached完全剖析–1. memcached的基础1.6.总结

这次简单介绍了memcached,以及它的安装方法、Perl客户端Cache::Memcached 的用法。只要知道,memcached的使用方法十分简单就足够了。

下次由前坂来说明memcached的内部结构。了解memcached的内部构造,就能知道如何使用memcached才能使Web应用的速度更上一层楼。欢迎继续阅读下一章。

19 / 81

memcached完全剖析–1. memcached的基础

20 / 81

Memcached源码剖析笔记

Memcached 源码剖析笔记 Xguru Memcached是一个自由、源码开放、高性能、分布式 内存对象缓存系统,目的在于通过减轻数据库负载来使 动态Web应用程序提速。

目录 1.背景 (3) 2.memcached的安装 (4) 3.memcached的配置 (5) 4.memcached的使用 (6) 4.1.存储命令 (7) 4.2.读取命令 (8) 4.3.删除命令 (8) 4.4.高级命令 (9) 4.5.其他命令 (10) 5.Memcached内部工作机制 (11) 5.1.Memcached基本的数据结构 (11) 5.2.基本设计概念和处理流程 (12) 5.3.内部Hash机制 (15) 5.3.1.Hash函数及冲突解决 (15) 5.3.2.HashTable主要函数 (15) 5.4.slab内存处理机制 (17) 5.4.1.slab主要函数 (17) 5.4.2.slab机制中所采用的LRU算法 (19) 5.5.控制item各种函数 (20) 5.6.守护进程机制 (22) 5.7.Socket处理机制 (23) 1

5.7.1.Unix域协议 (23) 5.7.2.TCP/UDP协议 (24) 5.8.多线程处理机制 (25) 5.9.事件处理机制 (25) 6.未完善之处 (27) 7.参考文献 (28) 2

1.背景 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。 Memcached是一个自由、源码开放、高性能、分布式内存对象缓存系统,目的在于通过减轻数据库负载来使动态Web应用程序提速。 Memcached是一个在内存中对任意的数据(比如字符串,对象等)所使用的key-value 存储。数据可以来自数据库调用,API调用,或者页面渲染的结果。 Memcached设计理念就是小而强大,它简单的设计促进了快速部署、易于开发,并解决面对大规模的数据缓存的许多难题。所开放的API能用于大部分流行的程序语言 3

中华石杉顶尖互联网Java架构师就业班

目录 第一阶段、Spring Boot从入门到精通(10小时) (1) 第二阶段、小型电商网站开发+设计模式+架构设计+项目管理(20小时) (2) 第三阶段、Spring Cloud从入门到精通(20小时) (3) 第四阶段、电商网站的微服务架构(20小时) (3) 第五阶段、高并发大型电商网站架构(150小时) (4) 第六阶段、高可用大型电商网站架构(30小时) (6) 第七阶段、高性能大型电商架构(30小时) (7) 第八阶段、亿级流量的大型电商系统架构(150小时) (7) 第九阶段、自己动手做多租户SaaS云ERP系统 (8) 第十阶段、底层技术+微服务中间件(50小时) (9) 第十一阶段、自己动手写仿Storm的实时计算中间件 (10) 第十二阶段、开源框架源码阅读+定制化开发mvc/ioc/orm框架(50小时) (10) 第十三阶段、自己动手写工作流框架 (10) 授课方式说明 (10) 学习进度说明 (11) 就业指导说明 (12) 学习成果说明 (12) 2万费用说明 (13) 讲师课程质量以及是否会跑路 (14) 第一阶段、Spring Boot从入门到精通(10小时) 目前市面上所有的视频课程以及书籍,都只是简单介绍Spring Boot的基础知识,没有任何一套资料深入讲解这两个技术的。而如果你自己跟着官网慢慢看,全英文官网,估计大部分同学都很难看的懂,或者学习速度非常慢。 我会将Spring Boot的所有核心技术点以及高阶技术点,全部嚼烂咬碎,深度提炼,用最精炼的语言,给大家讲透,让大家在最短的时间内彻底掌握这个未来绝对主流的开发框架,为未来的高阶的项目打好扎实的基础。 强调一下,这块技术讲解,绝对不会采取拖延时间,以及碎碎念的方式,一点一点细节慢慢

边界网关协议BGP文档分析

《网络协议栈分析与设计》大作业 边界网关协议(BGP)RFC分析与设计Border Gateway Protocol 学生:吕卿网络1101班 201192334 2013/12/16

1.背景介绍 边界网关协议是用来连接网络上不同自治系统(AS)的路由选择协议。BGP是为了取代最初的外部网关协议EGP所设计的,也被认为是路径矢量协议。它通过维护IP路由表和前缀表来实现自治系统(AS)间的可达性。BGP的主要功能是和其他BGP系统交换网络可达性信息。必须要注意的是BGP是建立在可靠连接的基础之上的。 2.操作总结 在两个系统建立的连接中他们互相交互信息更改数据。初始数据流是整个BGP路由表。BGP不要求整个BGP路由表的周期性更新。保持存活信息定期的被发送以确保连接的存活。通知信息被发送来回馈错误通知和特殊情况。执行边际路由协议的主机不必是路由器。一个非路由器的主机可以和路由器经由EGP甚至内部路由协议进行交互。如果一个特殊的自治系统(AS)有多个BGP发言者,那么一定要注意在一个AS内要的几个发言者要有一致的路由视野。 3.信息格式 信息在可靠传输协议连接上发送。信息只有在被完全接收之后才能够被处理。最大的信息大小是4096字节。所有的实现必须支持这一最大信息规格。最小的数据规格要包含BGP头部不含数据部分。 3.1数据头格式 每个信息有个固定大小的头部。包括标识物·长度·类型。标识物:这16字节大小的领域包含信息接收方可以对信息进行确认的信息。长度:这2字节无符号整数表明这则信息的总长度。长度的值必须在19到4096之间类型:这一字节无符号整数表明这则信息的代码模式。共有四种类型: 1 - OPEN 2 - UPDATE 3 - NOTIFICATION 4 - KEEPALIVE

Memcached使用点滴

我对于Memcached的接触,还是在去年看了CSDN的一系列国外大型网站架构设计而开始的。最初的时候只是简单的封装了Memcached Java版的客户端,主要是对于配置的简化以及Memcached多点备份作了一些工作,然后就作为ASF的组件一部分提供给其他Team使用。其实看过Memcached Java客户端代码的人就会了解其实客户端的事情很简单,就是要有一套高性能的Socket通信框架以及对Memcached的私有协议实现的接口,自己去做这些事情也是很简单的,不过既然有可以满足自己需求的开源部分,那么就去实现自己需要的但没有实现的。这里我用的是Whalin的客户端版本,这里为什么还要提出来讲这个,后面会提到。 在对Java客户端作了简单封装和扩展以后,由于其他Team使用的没有什么特殊需求,也就没有再去做太多的修改,直到最近自己的服务集成平台需要做服务访问控制,才重新丰富了Cache组件,也就是这个过程中对于Memcached的一些特性和小的细节有了一些新的认识。 作为服务集成平台需要对服务有所监控,包括访问频率控制以及访问次数控制。频率控制其实很类似于硬件方面的频率控制,例如硬件可以对IP的高频率访问视为攻击,列入黑名单。而作为服务的访问,对于服务访问者的控制其实涉及到了业务参数,那么硬件就不是很适合去做这方面的控制,为此我也考虑了很久,最开始打算在Apache上做一个模块控制,但是最后觉得还是放在后面的业务框架上做这件事情。当然后面我说说的方案可能并不好,但是也算是一种想法。要把频繁的访问数据记录下来同时分析,那么数据库肯定是不行的,最简单的方式就是采用Cache,又因为是集群范围内的控制,那么集中式Cache就非Memcached莫数了(分布式的Cache传播本身损耗太大,集中式Cache本来的最大缺点就是单点,但作简单的备份操作就可以基本解决此类问题)。 作为解决这个问题的方法来说只需要实现两部分工作:访问计数器,定时任务。定时任务在我做日志分析框架的时候都是采用了Jdk5的Concurrent包里面的ScheduledExecutorService,这个作简单的循环任务足够用了,同时也是有很好的多线程异步支持,复杂一点么用Quartz。计数器就要靠Memcached来实现了,本来一般的Cache最大的问题就是高并发下的事务保证,如果采用Get+Set 来完成计数的话,那么高并发下计数器就会出现读写不一致性的问题,幸好Memcached提供了计数累加功能,让这种累加动作能够在服务端一次做好,服务端控制并发写入,保证数据的一致性。 下面就看看以下几个方法: boolean storeCounter(String key, long count):存储key的计数器,值为count。

解析豆瓣的基础架构

豆瓣整个基础架构可以粗略的分为在线和离线两大块。在线的部分和大部分网站类似:前面用,用Nginx做反向代理,形成负载均衡的一层;应用层主要是做运算,将运算结果返回给前面的DAE平台是这两年建起来的,现在大部分豆瓣的应用基本都跑在DAE上面了;应用后面的基

以DPark能够大幅提升性能。另外,因为DPark的编写使用了函数式语言的特点,所以可以写的非常简洁: 到目前(2014年3月),DPark的集群规模和处理数据量已经比去年多了一倍左右,一天要处 理60~100T B左右的数据。 团队 当前,我所负责的豆瓣平台部一共包括四个部分:核心系统,这块也是由我直接带领的,共6名工程师;DAE,现在是彭宇负责,共4名工程师;DBA两人;SA两人。 平台部负责的项目大多是跟业务无关的东西,贴近应用层的主要在产品线团队做,这个分工跟豆瓣工程团队的发展历史有关。早期豆瓣工程师还不多的时候,就已经分为两种倾向,一种是偏业务的,就是去做用户能看得见的东西;另一种是支持性的,运行在业务层下面、不被用户所感知的东西。下面这一层就衍变成了平台部门。 在豆瓣,不管是做产品还是做平台的工程师,技术实力都比较强,一个项目应该从哪个部门发起,并不是看这个任务的难度,而是看它是公共的还是业务特有的。有些项目即使未来可能会成为公共的,但一开始只是一个产品线需要,那么它也会从产品线发起。比如豆瓣的短信服务,最开始是产品线有需求,所以这些服务都是由他们发起完成的,平台这边主要负责提供建设服务的架构,比如DoubanService,告诉他们一个服务怎样去写、怎样去部署、怎样去对用户开放。短信服务后来成为很多产品线都在使用的服务,同时这个系统本身也越来越成熟,那么它逐渐就被转移到SA团队来进行维护。

simple-spring-memcached统一缓存的使用实例

simple-spring-memcached统一缓存的使用 实例 如何在一个中型的Java应用中使用Memcached缓存数据不是个简单的问题。当某个缓存数据需要在多个系统间共享和失效时,必须要有统一的规划才能保证不出错。经过各种实践,目前系统在使用Memcached缓存数据全部采用Simple-Spring-Memcached框架来完成,并统一规划各系统Spring和Cache key的配置。 下面对在使用过程中需要注意的点做一个详细说明: Cache整体规划 目前我们系统中有两个不同的Memcached服务器: 1session memcached服务器:主要存储用户的session 2app memcached服务器: 主要用于缓存应用数据 由于应用所有的缓存数据都放在app缓存上,为避免各应用的缓存数据出现冲突,必须规划好它们的命名空间。所幸Simple-Spring-Memcached支持namespace的概念,因此对各应用的namespace前缀规定如下: 应用namespace前缀 goodscenter goodscenter trade trade uic uic 这个namespace在生成key时,将放在最前面,稍后会有例子详述。 同一个应用中存在许多需要缓存的对象,因此约定namespace前缀之后再加上缓存对象的类名。 例子如下: 应用缓存对象完整的namespace 最终生成的key trade TcRate (id为42) trade:TcRate trade:TcRate:12 goodscenter GoodsDo(id为 42) goodscenter:GoodsDo goodscenter:GoodsDo:1 2 key的生成规则 Simple-Spring-Memcached提供的针对单个对象的注解接口提供了两种key生成方式,详情见此文

完整社交APP需求分析原型设计整体架构前端后端架构

一个社交App需实现的功能 用户关注的常规社交功能、活动、地理位置、探索功能、新鲜事、视频照片分享等等,需要提供的功能不胜枚举,所以从技术角度来说,开发者需要解决的问题也是异常复杂的。 当一款社交App发布之初,用户访问量比较小,使用一台服务器就能够支撑全部的访问压力和数据存储需求,但是互联网应用具有病毒式的传播特点。一款App很可能会面临一夜爆红的现象,访问量和数据量在短时间内呈现爆发式增长,这时候会面临的局面是每天上亿PV、数百万新增用户和活跃用户、流量飙升至每秒数百兆。这些对于一个只部署了简单后端架构的应用来讲是无法支撑的,会直接导致服务器响应缓慢甚至超时,以及在高峰期时服务呈现瘫痪状态,使得后端的服务完全无法使用,用户体验急剧下降。本文将会通过一个真实的案例来分享一个社交应用如何构建一个具备高伸缩性的后端系统。 社交App最初部署的后端架构解析 社交App在最初的时候,后端架构相对比较简单,最初是部署在基础网络之上。最前面放置一台绑定了公网IP的nginx服务器作负载均衡,后面放置3台应用服务器来负责处理所有业务上的请求,最后面搭建一台MySQL Database数据库。 构建私有网络 随着产品的不断迭代、用户数的持续增长、数据量的积累,App就需要改进自己的后端架构,即开始构建私有网络。用户可以使用私有网络构建自己的网络拓扑——创建路由器和私有网络,将后续加入的用于运行内部服务的主机放置在私用网络中,可以有效地和云平台其他用户主机,在网络上实现100%二层隔离。主机对外开放的仅仅只有80端口,这样系统安全性上多了一层保障。

在上面的架构图中,最前面的是防火墙,后面接负载均衡器,然后接路由器和私有网络,很多互联网应用都存在读多写少的情况,这个比例有时可以达到8:2,所以我们首先通过引入缓存分摊数据库读压力。其次,引入负载均衡器,替换最初架构中的nginx proxy,负责均衡器在这里其主要用于分发请求到后端多台应用服务器,,当其中一台应用服务器挂掉,负载均衡器可以进行自动隔离。 业务分区与扩展 App随着并发访问量和数据量不断增大,首先想到横向扩容Web服务。水平扩容业务服务器的前提是要保证每台服务器都是无状态的,将session信息下放到缓存或数据库中存储,保证请求被负载到任何一台服务器可以正常处理。

PHP大型网站的架构实例分析

PHP大型网站的架构实例分析 Poppen.de是德国的一个社交网站,相对Facebook、Flickr来说是一个很小的网站,但它有一个很好的架构,融合了很多技术,如 Nigix、MySql、CouchDB、Erlang、Memcached、RabbitMQ、PHP、Graphite、Red5以及Tsung. 统计信息 200万注册用户数; 2万并发用户数; 每天20万条私有消息; 每天25万登录次数; 项目团队有11个开发人员,两个设计,两个系统管理员; 商业模式 该网站采用免费增值模式,用户可以免费使用下面任何服务: 搜索其他用户; 给好友发送消息; 上载图片和视频; 寻找好友; 视频聊天; 更多… 但如果用户想享受不受限制发送消息和上载图片,那么就得根据需要支付不同类型的会员服务,视频聊天及网站其他服务也采用同样的策略。 工具箱 Nginx Poppen.de 所有的服务都是基于Nginx服务上的。前端有两台Nginx服务器在高峰期提供每分钟15万次请求的负载,每个机器已经有四年寿命,并且只有一个CPU和3GB RAM.Poppen.de拥有三台独立的图像服务器,由三台Nginx服务器为*.bilder.poppen.de提供每分钟8万次请求服务。

Nginx架构中一个很酷的设计就是有很多请求是由Memcached处理的,因此请求从缓存中获取内容而不需要直接访问PHP机器。比如,用户信息页(user profile)是网站需要密集处理的内容,如果把用户信息页全部缓存到Memcached 上,那么请求直接从Memcached上获取内容。Poppen.de的Memcached每分钟可以处理8000次请求。 架构中有三个Nginx图像服务器提供本地图像缓存,用户上载图像到一个中央文件服务器。当向这三个Nginx之一中请求图像时,如果服务器本地中没有存在该图像,则从中央文件服务器下载到该服务器上作缓存并提供服务。这种负载均衡的分布式图像服务器架构设计可以减轻主要存储设备的负载。 PHP-FPM 该网站运行在PHP-FPM上。共有28台双CPU、6GB内存的PHP机器,每个机器上运行100个PHP-FPM的工作线程。使用启用了APC的PHP5.3.x. PHP5.3可以降低CPU和内存使用率的30%以上。 程序代码是基于Symfony1.2框架之上开发的。一是可以使用外部资源,二是能够提高项目开发进度,同时在一个著名的框架上可以让新开发人员更容易加入到团队中来。虽然没有任何事情都是十全十美的,但可以从Symfony框架中得到很多好处,让团队可以更多的精力放在Poppen.de的业务开发上去。 网站性能优化使用XHProf,这是Facebook开源出来的一个类库。这个框架非常容易个性化和配置,能够可以缓存大部分高代价的服务器计算。 MySQL MySQL是网站主要的RDBMS.网站又几个MySql服务器:一台4CPU、32GB的服务器存储用户相关信息,如基本信息、照片描述信息等。这台机器已经使用了4年,下一步计划会使用共享集群来替换它。目前仍基于这个系统上进行设计,以简化数据访问代码。根据用户ID进行数据分区,因为网站中大部分信息都是以用户为中心的,如照片、视频、消息等。 有三台服务器按主-从-从配置架构提供用户论坛服务。一台从服务器负责网站自定义消息存储,到现在有2.5亿条消息。另外四台机器为主-从配置关系。 另外由4台机器配置成NDB族群专门服务于密集型写操作数据,如用户访问统计信息。 数据表设计尽量避免关联操作,尽可能缓存最多的数据。当然,数据库的结构化规范已经完全被破坏掉了。因此,为了更容易搜索,数据库设计创建了数据挖掘表。 大部分表是MyISAM型表,可以提供快速查找。现在的问题是越来越多的表已经全表锁住了。Poppen.de正考虑往XtraDB存储引擎上迁移。

memcached代码分析详解

memcached分析详解

目录 1.文档目的 (1) 1.1.前言 (1) 2.memcached是什么 (2) 2.1. memcached的特征 (2) 3.memcached适合的场合 (4) 4.memcached的代码分析 (5) 4.1. main流程 (5) 4.2. memcached服务流程(TCP) (6) 4.3. memcached状态转换和通信协议处理 (7) 4.4. memcached核心数据结构 (7) 4.5. Slab Allocation机制:整理内存以便重复使用 (8) 5.memcached的使用优化 (10) 5.1. 命中率 (10) 5.2. 空间利用率 (11) 5.3. 加速比 (12) 5.4. 安全性能 (12) 6.memcached的测试分析 (13) 6.1. 读写memcache指令测试 (13) 6.2. 服务端系统负载 (13) 6.3. 空间分配,命中率 (14) 7.memcached的中间层客户端编写 (16) 8.libevent简介 (17) 9.memcached应用 (18) 10.结束语 (20)

1. 文档目的 1.1. 前言 文档就是简单的把memcached做一个代码走读和分析,起到一个抛砖引玉的作用; 目的就是让大家在使用memcached这个工具时,多一些对工具的了解,从而确定你的程序是否真的需要用memcached来实现不可; 短短2个小时也讲不了多少,主要是做一个学习探讨,如果大家感兴趣的话后期可以再做培训 牛人真多啊,向先行者致敬!

2. memcached是什么 memcached广泛应用在大负载高并发的网站上,是一种非常成熟的产品(称为一项技术也未尝不可)。像facebook,youtube,yahoo,sina,sohu,netease,豆瓣等网站均或多或少使用了该项产品。memcached在以用户为中心的网站上,表现尤其突出,例如sns,blog等web2.0应用的站点。这些站点一般来讲,特别注重用户体验,用户对服务器的响应速度要求很高,用户数据相对比较复杂、关连度比较高,需要经常对数据库进行更新和检索。 许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、网站显示延迟等重大影响。 这时就该memcached大显身手了。memcached是高性能的分布式内存缓存服务器。一般使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。 2.1. memcached的特征 1)memcached的服务器客户端通信并不使用复杂的XML等格式,而使用简单的基于文本行的协议。因此,通过telnet 也能在memcached上保存数据、取得数据。下面是例子。 $ telnet localhost 8119 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. set foo 0 0 3 (保存命令) bar (数据)

memcached完全剖析(1-5)整理

memcached全面剖析 作者:长野雅广(Masahiro Nagano) 作者:前坂徹(Toru Maesaka) 翻译:charlee 整理:yaykey 发表时间:2008/07/02‐2008/07/30 翻译时间:2008/07/10‐2008/07/31 整理时间:2010/11/09

原文链接: http://gihyo.jp/dev/feature/01/memcached/0001 http://gihyo.jp/dev/feature/01/memcached/0002 http://gihyo.jp/dev/feature/01/memcached/0003 http://gihyo.jp/dev/feature/01/memcached/0004 http://gihyo.jp/dev/feature/01/memcached/0005 译文地址: ?第1次:https://www.doczj.com/doc/fa15498045.html,/2008/07/10/memcached‐001/ ?第2次:https://www.doczj.com/doc/fa15498045.html,/2008/07/11/memcached‐002/ ?第3次:https://www.doczj.com/doc/fa15498045.html,/2008/07/16/memcached‐003/ ?第4次:https://www.doczj.com/doc/fa15498045.html,/2008/07/24/memcached‐004/ ?第5次:https://www.doczj.com/doc/fa15498045.html,/2008/07/31/memcached‐005/ 2 / 81

目录 1. memcached完全剖析–1. memcached的基础 (5) 1.1. memcached是什么? (7) 1.2. memcached的特征 (9) 1.2.1. 协议简单 (9) 1.2.2. 基于libevent的事件处理 (9) 1.2.3. 内置内存存储方式 (10) 1.2.4. memcached不互相通信的分布式 (10) 1.3. 安装memcached (11) 1.3.1. memcached的安装 (11) 1.3.2. memcached的启动 (12) 1.4. 用客户端连接 (13) 1.5. 使用Cache::Memcached (15) 1.5.1. 使用Cache::Memcached连接memcached (16) 1.5.2. 保存数据 (17) 1.5.3. 获取数据 (17) 1.5.4. 删除数据 (17) 1.5.5. 增一和减一操作 (18) 1.6. 总结 (19) 2. memcached全面剖析–2.理解memcached的内存存储 (21) 2.1. Slab Allocation机制:整理内存以便重复使用 (23) 2.1.1. Slab Allocation的主要术语 (24) 2.1.1.1. Page (24) 2.1.1.2. Chunk (24) 2.1.1.3. Slab Class (24) 2.2. 在Slab中缓存记录的原理 (25) 2.3. Slab Allocator的缺点 (27) 2.4. 使用Growth Factor进行调优 (29) 2.5. 查看memcached的内部状态 (31) 2.6. 查看slabs的使用状况 (33) 2.7. 内存存储的总结 (35) 3. memcached全面剖析–3.memcached的删除机制和发展方向 (37) 3.1. memcached在数据删除方面有效利用资源 (39) 3.1.1. 数据不会真正从memcached中消失 (39) 3.1.2. Lazy Expiration (39) 3.2. LRU:从缓存中有效删除数据的原理 (41) 3.3. memcached的最新发展方向 (43) 3.3.1. 关于二进制协议 (43) 3.3.2. 二进制协议的格式 (43) 3.3.3. HEADER中引人注目的地方 (45) 3.4. 外部引擎支持 (47) 3 / 81

redis缓存技术学习

1 什么是redis redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。 2 性能怎么样 Redis是一个高性能的key-value内存数据库。官方性能测试结果: set操作每秒110000次,get操作每秒81000次。 3 可不可以存对象 和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作。 4 Redis与memcache的最大区别 Replication(树形) data types(String、Lists、Sorted Sets、Hashes) persistence (snapshot、aof) 很多开发者都认为Redis不可能比Memcached快,Memcached完全基于内存,而Redis 具有持久化保存特性,即使是异步的,Redis也不可能比Memcached快。但是测试结果基本是Redis占绝对优势。一直在思考这个原因,目前想到的原因有这几方面。 Libevent。和Memcached不同,Redis并没有选择libevent。Libevent为了迎合通用性造成代码庞大(目前Redis代码还不到libevent的1/3)及牺牲了在特定平台的不少性能。Redis 用libevent中两个文件修改实现了自己的epoll event loop(4)。业界不少开发者也建议Redis

memcached 构建分布式缓存

Memcached 什么是Memcached 许多Web 应用程序都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。但随着数据量的增大,访问的集中,就会出现REBMS的负担加重,数据库响应恶化,网站显示延迟等重大影响。 Memcached是高性能的分布式内存缓存服务器。一般的使用目的是通过缓存数据库查询结果,减少数据库的访问次数,以提高动态Web 应用的速度、提高扩展性。如图: Memcached的特点: Memcached作为高速运行的分布式缓存服务器具有以下特点。 1.协议简单:memcached的服务器客户端通信并不使用复杂的MXL等格式, 而是使用简单的基于文本的协议。 2.基于libevent的事件处理:libevent是个程序库,他将Linux 的epoll、BSD 类操作系统的kqueue等时间处理功能封装成统一的接口。memcached使 用这个libevent库,因此能在Linux、BSD、Solaris等操作系统上发挥其高 性能。 3.内置内存存储方式:为了提高性能,memcached中保存的数据都存储在 memcached内置的内存存储空间中。由于数据仅存在于内存中,因此重 启memcached,重启操作系统会导致全部数据消失。另外,内容容量达

到指定的值之后memcached回自动删除不适用的缓存。 4.Memcached不互通信的分布式:memcached尽管是“分布式”缓存服务器, 但服务器端并没有分布式功能。各个memcached不会互相通信以共享信 息。他的分布式主要是通过客户端实现的。 Memcached的内存管理 最近的memcached默认情况下采用了名为Slab Allocatoion的机制分配,管理内存。在改机制出现以前,内存的分配是通过对所有记录简单地进行malloc 和free来进行的。但是这中方式会导致内存碎片,加重操作系统内存管理器的负担。 Slab Allocator的基本原理是按照预先规定的大小,将分配的内存分割成特定长度的块,已完全解决内存碎片问题。Slab Allocation 的原理相当简单。将分配的内存分割成各种尺寸的块(chucnk),并把尺寸相同的块分成组(chucnk的集合)如图: 而且slab allocator 还有重复使用已分配内存的目的。也就是说,分配到的内存不会释放,而是重复利用。 Slab Allocation 的主要术语 Page :分配给Slab 的内存空间,默认是1MB。分配给Slab 之后根据slab 的大小切分成chunk. Chunk : 用于缓存记录的内存空间。 Slab Class:特定大小的chunk 的组。 在Slab 中缓存记录的原理 Memcached根据收到的数据的大小,选择最合适数据大小的Slab (图2) memcached中保存着slab内空闲chunk的列表,根据该列表选择chunk,然后将数据缓存于其中。

Memcached强大的缓存中间件

Memcached教程2018年5月30日

修改记录

Mencached 1.1介绍 Memcached是一个自由开源的,高性能,分布式内存对象缓存系统,一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。相对于session缓存的话,session缓存占用内存太高,分布式的项目也只能用中间件缓存,所以session缓存将会推出历史舞台。 一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。 1.2第二步安装 获取Memcached 通过wget https://www.doczj.com/doc/fa15498045.html,/files/memcached-1.4.24.tar.gz下载最新源码。 安装Memcached 1、解压tar -xf memcached-1.4.24.tar.gz; 2、进入目录cd memcached-1.4.24/; 3、配置 ./configure; 1 /9

4、编译安装make&&make install; 其中&&表示前面的命令执行成功才会执行后面的命令; 安装完成后memcached的默认目录为/usr/local/bin/memcached 启动memcached 启动例子:memcached -u root -d 启动参数说明: -d 选项是启动一个守护进程。 -m 是分配给Memcache使用的内存数量,单位是MB,默认64MB。 -u 是运行Memcache的用户,如果当前为root 的话,需要使用此参数指定用户 -p 是设置Memcache的TCP监听的端口,最好是1024以上的端口。 -c 选项是最大运行的并发连接数,默认是1024。 -P 是设置保存Memcache的pid文件。 参考地址: https://https://www.doczj.com/doc/fa15498045.html,/article/e2284b2b6070eee2e7118d67.html 1.3第三步配置gitlab sudo gitlab-ctl reconfigure 注意:1、防火墙限制了端口,centos7 开放firewall端口 开发防火墙: sudo firewall-cmd--permanent--add-service=http 2 /9

memcached是一个高性能的分布式的内存对象缓存系统

memcached是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。最初为了加速LiveJournal 访问速度而开发的,后来被很多大型的网站采用。起初作者编写它可能是为了提高动态网页应用,为了减轻数据库检索的压力,来做的这个缓存系统。它的缓存是一种分布式的,也就是可以允许不同主机上的多个用户同时访问这个缓存系统,这种方法不仅解决了共享内存只能是单机的弊端,同时也解决了数据库检索的压力,最大的优点是提高了访问获取数据的速度!基于memcached作者对分布式cache的理解和解决方案。memcached完全可以用到其他地方比如分布式数据库,分布式计算等领域。 1、memcached 协议理解 memcache是为了加快https://www.doczj.com/doc/fa15498045.html,/访问速度而诞生的一个项目。 它的官方主页是:https://www.doczj.com/doc/fa15498045.html,/memcached/ 目前在网站开发中应用较少,主要的应用有: https://www.doczj.com/doc/fa15498045.html,/memcached/users.bml 在国内的网站开发中,还很少没见到有应用的,中文资料十分匮乏。 工作机制:通过在内存中开辟一块区域来维持一个大的hash表来加快页面访问速度,和数据库是独立的。但是目前主要用来缓存数据库的数据。允许多个server通过网络形成一个大的hash,用户不必关心数据存放在哪,只调用相关接口就可。存放在内存的数据通过LRU 算法进行淘汰出内存。同时可以通过删除和设置失效时间来淘汰存放在内存的数据。 2、memcached 使用入门 memcached最吸引人的地方主要在于它的分布式。分布式对于互联网应用来讲,按照用途基本上可划分为三种方式:分布式计算、分布式存储和两者兼而有之。memcached是分布式存储的一种。我们常见的分布式存储大多数是将N台设备(server或者单独的存储)构建成盘阵,而memcached旨在构建一个高速的内存池。更通俗一点来讲:分布式计算是将N颗cpu组装成一颗cpu,分布式慢速存储是将N个硬盘组装成一个大硬盘,memcached是将N块内存组装成一块大内存。 有个朋友问:那是不是代价很昂贵啊。我的回答是肯定的。如果你的网站规模只有三两台服务器的话,我觉得你就不用考虑这样的方案了,等你的网站做大了以后,再参考这方面的资料即可。一般都是比较大的互联网公司为了追求更好的用户体验,才进行这方面的投资,对他们来讲,用户体验至上,money是小case。 还有朋友问:有一些dbms提供内存表的功能,比如mysql的内存表,可以代替memcache d。但我要建议你的是:mysql的内存表确实起到同样的作用,但它的局限也很多,往往不能让你随心所欲,所以建议你不要走弯路。 二、memcached的应用场景 2.1 应用范围 memcached产品或相关技术的应用,我们在前面已经提到了一些。其实它的应用还是非常普遍的,应用作为广泛的领域:例如sns类网站、blog类网站、bbs类网站以及im后台服务。 2.2 sns类网站的应用 https://www.doczj.com/doc/fa15498045.html,是99年始于校园中的项目,有点像中国的校内网。几个学生纯属出于爱好做了这样一个网站,主要实现以下功能:sns、blog、bbs和rss等。livejournal从建立开始就采用了大量的开源软件,到现在它本身也衍生了不少开源软件。sns网站,现在比比皆是,规模比较大的象开心、校内、51,它们的页面上往往需要引用大量的用户信息、好友信息以及

memcached简单应用实例

Memcached的简单使用实例 最近一直在做一个项目的前期设计工作,考虑到后期系统的扩展和性能问题也找了很多解决方法,有一个就是用到了数据库的缓存工具memcached(当然该工具并不仅仅局限于数据库的缓存)。先简单的介绍下什么是memcached。 Memcached 是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。Memcached由Danga Interactive开发,用于提升https://www.doczj.com/doc/fa15498045.html,访问速度的。LJ每秒动态页面访问量几千次,用户700万。Memcached将数据库负载大幅度降低,更好的分配资源,更快速访问。上网baidu了很多东西,几乎都差不多,而且基于java的说的很少,所有只有在研究了各个其他语言类的应用后再来尝试在java上进行简单的操作应用。先从memcached上进行说明,memcached的最新版是采用c语言进行开发和设计的,据说旧版的是采用perl语言开发的,而且它是一个应用软件来的,是作为缓存服务器的服务器端运行在服务器上的,需要使用特定的语言编写客户端与其进行通信来进行数据的缓存和获取。通常我们是把memcached安装运行在web服务器上,然后通过对需要的数据进行缓存,据我目前所知,所有数据的缓存设置和存取操作,以及数据的更新后替换操作全部需要程序来进行,而不是自动进行的(自动不知道能不能成功,呵呵)。下面从一个实际的例子来应用memcached。 首先到https://www.doczj.com/doc/fa15498045.html,/memcached/下载memcached的windows版本和java客户端jar包,目前最新版本是memcached-1.2.1-win32.zip和java_memcached-release_1.6.zip,分别解压后即可!说明:window版本的memcache服务软件下载链接是无效的,我提供一个新的链接 https://www.doczj.com/doc/fa15498045.html,/memcached-win32/ 首先是安装运行memcached服务器,我们将memcached- 1.2.1-win32.zip解压后,进入其目录,然后运行如下命令: c:>memcached.exe -d install c:>memcached.exe -l 127.0.0.1 -m 32 -d start

memcached常用命令

memcached常用命令 1、启动Memcache 常用参数 -p 设置TCP端口号(默认设置为: 11211) -U UDP监听端口(默认: 11211, 0时关闭) -l 绑定地址(默认:所有都允许,无论内外网或者本机更换IP,有安全隐患,若设置为127.0.0.1就只能本机访问) -c max simultaneous connections (default: 1024) -d 以daemon方式运行 -u 绑定使用指定用于运行进程 -m 允许最大内存用量,单位M (默认: 64 MB) -P 将PID写入文件,这样可以使得后边进行快速进程终止, 需要与-d 一起使用 更多可以使用者memcached -h 在linux下:./usr/local/bin/memcached -d -u root -l 192.168.1.197 -m 2048 -p 12121 在window下:d:\App_Serv\memcached\memcached.exe -d RunService -l 127.0.0.1 -p 11211 -m 500 在windows下注册为服务后运行: sc.exe create M emcached_srv binpath= “d:\App_Serv\memcached\memcached.exe -d RunService -p 11211 -m 500″start= auto net start Memcached 2、连接和退出 telnet 127.0.0.111211 quit 3、基本命令 五种基本memcached 命令执行最简单的操作。这些命令和操作包括: set add replace get delete 前三个命令是用于操作存储在memcached 中的键值对的标准修改命令。它们都非常简单易用,且都使用如下所示的语法: command 参数说明如下:

Memcache入门及使用

一.系统核心优化 1. 介绍 战略:以最小的资源开销,提供一个最大访问量的网站服务。 二. 内存缓存memcache 1. memcache memcache是一种内存缓存技术。 memcache、redis、mongodb都是no-sql(非关系型数据库)的产品。 1.1 memcache和redis的异同 不同点: redis: 是一个新兴的内存缓存技术,支持String/list/set/sort set /hash多个数据类型 单个key存储数据量最大为1G

对各方面支持不健全(例如对windows系统没有支持) 支持持久化的 memcache: 是一个老牌的内存缓存技术,只支持String数据类型 单个key存储数据量最大为1M 对各个方面支持的比较好(例如各种系统都可以使用、各种框架[tp/yii等等]都可以直接使用、session也可以存储到memcache中) 不支持持久化 相同点: 数据都是在内存中存储的。 2. memcache使用 memcache是php语言操作内存的一个中间代理服务软件。 PHP 内存 Memcache 代理/介质 2.1 安装memcache服务器端

2.2 启动memcache服务 两种方式启动服务 ①前台启动

Ctrl+c 关闭前台服务 启动服务可以设置的参数:

上图启动memcache服务,端口为11230 本机允许访问分配128M的内存使用 ②制作为开机启动项服务 svn设置服务项目: sc create 名称 .... 之后可以看到服务项目已经ok

3. php操作memcache memcache是php里边的一个扩展。

相关主题
文本预览
相关文档 最新文档