资源描述:
《memcached&redis性能测试》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、一、Memcached1.1、memcached简介Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon)是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。但是它并不提供冗余(例如,复制其hashmap条目);当某个服务器S停止运行或崩溃了,所有存放在S上的键/值对都将丢失。
2、Memcached由DangaInteractive开发,其最新版本发布于2010年,作者为AnatolyVorobey和BradFitzpatrick。用于提升LiveJournal.com访问速度的。LJ每秒动态页面访问量几千次,用户700万。Memcached将数据库负载大幅度降低,更好的分配资源,更快速访问。1.2、Memcached是如何工作的Memcached的神奇来自两阶段哈希(two-stagehash)。Memcached就像一个巨大的、存储了很多对的哈希表。通过key,可以存
3、储或查询任意的数据。客户端可以把数据存储在多台memcached上。当查询数据时,客户端首先参考节点列表计算出key的哈希值(阶段一哈希),进而选中一个节点;客户端将请求发送给选中的节点,然后memcached节点通过一个内部的哈希算法(阶段二哈希),查找真正的数据(item)。举个列子,假设有3个客户端1,2,3,3台memcachedA,B,C:Client1想把数据”tuletech”以key“foo”存储。Client1首先参考节点列表(A,B,C),计算key“foo”的哈希值,假设memcachedB被选
4、中。接着,Client1直接connect到memcachedB,通过key“foo”把数据”tuletech”存储进去。Client2使用与Client1相同的客户端库(意味着阶段一的哈希算法相同),也拥有同样的memcached列表(A,B,C)。于是,经过相同的哈希计算(阶段一),Client2计算出key“foo”在memcachedB上,然后它直接请求memcachedB,得到数据”tuletech”。1.3、memcached提供的操作Memcached的客户端api接口提供了如下的方法存储和获取缓存数据
5、,并且这节方法在不同的客户端都是一致的:get(key):读取数据从缓存中,如果数据存在的话返回值,否则返回Null,nil,underfined。Set(key,value[,expiry]):写入缓存数据value,如果key已经存在了就更新value值,否则就增加一个新的key/value对,如果设定了expiry值,超过设定expiry时间后键值对就失效,时间单位是秒。Add(key,value,[,expiry]):添加键值对到缓存如果key不存在的话。Replace(key,value[,expiry]:
6、替换已经存在的键值对。Deleted(key[,time]):从缓存中删除键,如果提供一个时间,在这段时间内这个键是处于阻塞状态。二、安装部署Memcached服务2.1、安装libevent库memcached使用libevent库实现网络连接服务,理论上可以处理无限多的连接,但是它和Apache不同,它更多的时候是面向稳定的持续连接的,所以它实际的并发能力是有限制的。在保守情况下memcached的最大同时连接数为200,这和Linux线程能力有关系,这个数值是可以调整的。关于libevent可以参考相关文档。m
7、emcachd有自己的内存分配算法和管理方式,它和共享内存没有关系,也没有共享内存的限制,通常情况下,每个memcached进程可以管理2GB的内存空间,如果需要更多的空间,可以增加进程数。libevent下载地址:http://down1.chinaunix.net/distfiles/libevent-2.0.16-stable.tar.gz#wgethttp://down1.chinaunix.net/distfiles/libevent-2.0.16-stable.tar.gz然后是正常步骤的解压安装:#ta
8、rzxvflilbevent-2.0.16-stable.tar.gz#cdlibevent-2.0.16-stable#./configure–prefix=/usr/local/libvent-2.0.16-stable#make#makeinstall测试libevent是否安装成功:#ls–al/usr/local/libevent-2