设为首页 收藏本站
查看: 963|回复: 0

[经验分享] Memcache介绍

[复制链接]

尚未签到

发表于 2017-4-14 11:22:00 | 显示全部楼层 |阅读模式
1.What is Memcache?

Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。

Memcache由Danga Interactive开发,官方网站http://www.danga.com/memcached/ 。最初为了加速LiveJournal.com 访问速度而开发的,后来被很多大型的网站采用。LJ每秒动态页面访问量几千次,用户700万。

使用libevent进行网络IO处理,libevent作为一种新的非阻塞网络IO方式以高效的方法(epoll/kqueue)组织IO,分布式散列对象到不同的服务器,查询复杂度是O(1)。

基于memcache作者对分布式cache的理解和解决方案,memcache完全可以用到其他地方 比如分布式数据库、 分布式计算等领域。目前被广泛应用在facebook、wikipedia、sina、tom、sourceforge等大型网站。

2.Memcahce的实现机制

memcache本身在分布式应用中,单个结点之间是 Server相互独立,不会存在同级之间的通信。客户端对多个server通过一个连接池进行连接,可以设置连接池当中每个Memcached的连接数权 重,以根据服务器性能调整每台Memcached的连接数比例权重,实现近似的负载均衡。用户不必关心数据存放在哪个节点,由客户端统一算法进行分配。

memcache的Server结点对数据的存储操作都是在 内存中完成,对内存分配和回收采用了曾在SunOS实现的分页机制,预分配一个大内存(默认是 <= 200M),然后分页切块:将1M的内存片(slab)根据需要截取成若干种不同大小的内存块(chunk)来进行使用,共有80、100、128、 160、...1M这数十种大小不同的内存块(可以设置最小的块大小),默认按照125%递增(可以设置递增比例),对每个数据对象的存储便在所切的块中 进行操作,没有涉及到任何磁盘IO操作,绝对不会使用到SWAP虚拟内存,其性能瓶颈都在网络通信部分,而memcache正是将这一部分抛给了一个中间 层完成。可以说memcached是一个单进程、单线程、监听某个网络端口的daemon(或非daemon),是一个轻量级的应用服务进程

存放在内存的数据通过LRU算法进行淘汰出内存,同时可以通过删除和设置失效时间来淘汰存放在内存的数据。

3.Memcached的安装

服务端Memcached

需要libevent支持(epoll需要Linux 2.6+)http://www.monkey.org/~provos/libevent/

下载memcahced(最新版本1.2.2)http://www.danga.com/memcached/download.bml)

./configure --enable-threads

make

make install

Slackware下需要:

cd /usr/lib

ln -s /usr/local/lib/libevent.so libevent.so

4.Memcached的启动

memcached -d -m 1024 -l 172.16.194.182 -p 11211 -u user_00 -v >>/data/logs/memcached_11211.log

-p port number to listen on

-l interface to listen on, default is INDRR_ANY

-d run as a daemon

-r maximize core file limit

-t numbers of threads(default is 4,no more than the number of CPUs)

-u assume identity of (only when run as root)

-m max memory to use for items in megabytes, default is 64 MB

-M return error on memory exhausted (rather than removing items)

-c max simultaneous connections, default is 1024

-k lock down all paged memory

-v verbose (print errors/warnings while in event loop)

-vv very verbose (also print client commands/reponses)

-h print this help and exit

-i print memcached and libevent license

5.Memcache的优点

由于使用自己的动态内存chunk分配机制(其它cache 系统都使用System V的共享内存),每个key的值所占用的内存与chunk大小接近(其它Cache系统的chunk大小是在配置文件里面设置的固定大小),使得内存浪费 非常少,同时又支持客户端对存储数据的zilb压缩和还原,使得占用内存进一步减少,因而与其它cache系统相比其占用内存最少。

使用了性能最高的epoll,其负载能力相当强,并且支持其它cache系统都不支持的UDP协议连接和Unix域套接口

可以使用字符串作为key(其它Cache系统都只能使用数字),可以直接存取数组和对象,无需在存储的时候进行串行化(serialize)和反串行化(unserialize),对于程序处理数组和对象更为方便

使用连接池,可以定制每个Memcached实例所支持的连接数权重,便于根据各个服务器的性能来调整每个Memcached所承载的连接,实现部分负载均衡

程序中无需关注数据被定位在哪一台服务器,由客户端来实现数据分布(各种语言的客户端的key定位算法都相同)

可以设置key的有效期过期时间,过期后系统将进行自动淘汰。其它cache系统不能设置key的过期时间,只能根据LRU算法进行淘汰。

客户端支持C、C#、Perl、PHP、Java、Ruby、Python等语言,方便多种语言操作相同缓存数据

6.Memcache的缺点

不支持根据条件进行查询等操作,如果必须使用条件搜索,那么只能通过程序先获取需要的一组key值,通过Memcached来一次性get获取(即get一个key的数组)

key与value是一一对应关系,如果需要一对多的对应,那么只能是将value设置为一个数组或者对象(即set或replace一个key,其value为数组或对象)

和DB不存在同步关系,其数据全部由Web程序来提供插入、更新和删除,Memcached不负责从数据库中读取数据来更新cache,所以DB的数据更新需要在Web程序中实现。

数据恢复机制比较薄弱,由于不同的key是根据一种算法保存在不同的Memcached实例所划分的内存中,所以其数据恢复相对比较困难

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-364853-1-1.html 上篇帖子: Erlang Memcache 下篇帖子: 小结memcache
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表