memcached 分布式
memcached定义
memcached 是一套分布式的高速缓存系统,被广泛应用于应用系统的缓存层来提升应用程序的访问速度;memcache缺乏认证以及安全管制,这表明应将memcached服务器放置在防火墙后;memcached的API使用32比特的循环冗余校验(CRC-32)计算键值后,将数据分散在不同的服务器上。当表格满了以后,接下来新增的数据会以LRU机制替换掉。由于memcached通常只是当作缓存系统使用,所以使用memcached的应用程序在写回较慢的系统时(像是后端的数据库)需要额外的代码更新memcached内的数据;memcached的缓存是基于内存的,因此不建议使用memcached缓存复杂的对象
通过定义可知,使用memcached可以高速的缓存频繁访问的对象,从而减轻存储系统(如关系型数据库,磁盘等)的访问负担;其次,memcache缓存的内容是在内存中,访问速度快,可以为应用系统实时响应提供依据。
memcached适用于什么情况
1. 底层数据库压力大,通过memcached可以将频繁访问的数据对象进行缓存,减少对底层数据库的访问来达到减轻数据库压力,使数据库有时间和处理能力去处理其他后台逻辑运算。
3. 对象变化周期长,也就是说对象长时间不进行修改,可以将这些对象缓存到memcached中,供业务快速访问。而对于对象变化比较频繁的,不建议memcached来缓存,因为memcached的访问很快,而且没有事务来控制数据一致性,所以时常导致缓存对象与时间保存对象不一致的情况。
memcached分布式的优势
memcached作为缓存层,需要缓存的内容会越来越多,当一台服务器无法承受所有缓存的内容时,就需要考虑将memcache调整为分布式,通过多台服务器来分担缓存的压力。memcached分布式的优势有哪些呢:
1. 客户端担当分布式的master,通过客户端的分布函数(默认哈希取余的方式)来将缓存的key分散到不同服务器上。至于为什么客户端担当分布式的master,是由于只要分布函数一致,那么不同客户端都会将相同的key会分配到同一台服务器上,而且master的职责比较单一(就是根据key得到数据所在服务器)。
2. memcached分布式集群上某台服务器宕机,客户端访问的缓存恰巧存储在宕机的服务器上时,缓存层被穿透去底层存储层读取数据,并将读取的内容缓存到未宕机的服务器上(分布方式去掉宕机的服务器,然后根据哈希取余的方式确定新的服务器)。
3. memcached分布式集群上宕机的服务器修复上线后,客户端访问的缓存能访问该台宕机的服务器了,但是缓存的内容却在其他服务器上,此时缓存层再次被穿透去底层存储层读取数据,并将读取的内容重新缓存到该宕机服务器上供后续访问使用;对于保存有相同key的另一台服务器上的相同key不会被自动删除但也不会再次使用,直到垃圾回收时清除。
4. memcached分布式集群上如果不同服务器存在相同的key,那么删除该key时,只会删除根据分布函数得到的服务器上的key,对于其他服务器上相同的key则不会被删除,直到垃圾回收。造成的风险是如果能访问的这台服务器又宕机了,而此时有相同key的服务器上key还未清除而且恰巧访问这台,就有可能造成脏读。
memcached分布式的缺点
1. memcached分布式不会存储副本,也就是说某一台服务器宕机,缓存在该台服务器上的内容就会丢失。
2. memcached的key分布并不是完全离散的,导致的结果就是某些台服务器缓存的量大,某些台服务器缓存的量小;不过memcached的访问速度快,缓存量大也不会造成太大的延迟。
3. 数据类型比较单一,不能存储复杂的对象。
memcached常用启动参数
-p 指定memcached启动的端口,默认为11211
-m 指定memcached使用的最大内存,默认为64M
-t 指定memcached线程数,默认为4
-l 绑定的IP地址,默认为所有都允许访问,无论内外网或者本机更换IP,有安全隐患,若设置为127.0.0.1则只允许本机访问
-d start 启动memcached服务
-d restart 重启memcached服务
-c 最大同时连接数,默认为1024
memcached性能
memcached的性能已经特别高,但是随着存储量和并发量的增大,性能会下降,但是使用集群,性能比使用单台时要高。详情请看:http://www.diggerplus.org/archives/190;
其他
1. memcached的key最大存储250个英文字母
2. memcached的key不能存在空格和控制字符
3. memcached的默认过期时间为30天,如果设置超时时间长于30天,则30天起效,也就是说超时时间不会超过30天
4. memcached单个key的值最大为1M,如果缓存的值大小大于1M,可以通过将值拆分为多个key进行保存
memcached 分布式的更多相关文章
- Memcached 分布式缓存实现原理
摘要 在高并发环境下,大量的读.写请求涌向数据库,此时磁盘IO将成为瓶颈,从而导致过高的响应延迟,因此缓存应运而生.无论是单机缓存还是分布式缓存都有其适应场景和优缺点,当今存在的缓存产品也是数不胜数, ...
- memcached分布式实现原理
摘要 在高并发环境下,大量的读.写请求涌向数据库,此时磁盘IO将成为瓶颈,从而导致过高的响应延迟,因此缓存应运而生.无论是单机缓存还是分布式缓存都有其适应场景和优缺点,当今存在的缓存产品也是数不胜数, ...
- memcached 分布式聚类算法
memcached 分布式集群,该决定必须书面开发商自己.和redis 由分布式server决定.上 memcached 有两个选项用于分布式.第一个是:模运算 另一种是:一致性hash 分布式算法. ...
- memcached分布式缓存
1.memcached分布式简介 memcached虽然称为“分布式”缓存服务器,但服务器端并没有“分布式”功能.Memcache集群主机不能够相互通信传输数据,它的“分布式”是基于客户端的程序逻辑算 ...
- 让memcached分布式
memcached是应用最广的开源cache产品,它本身不提供分布式的解决方案,我猜想一方面它想尽量保持产品简单高效,另一方面cache的key-value的特性使得让memcached分布式起来比较 ...
- 09 Memcached 分布式之取模算法的缺陷
一: Memcached 分布式之取模算法的缺陷(1)假设你有8台服务器,运行中突然down一台,则求余数的底数就7. 后果: key_0%8==0 ,key_0%7==0 =>hist(命中) ...
- Memcached 分布式缓存实现原理简介
摘要 在高并发环境下,大量的读.写请求涌向数据库,此时磁盘IO将成为瓶颈,从而导致过高的响应延迟,因此缓存应运而生.无论是单机缓存还是分布式缓存都有其适应场景和优缺点,当今存在的缓存产品也是数不胜数, ...
- Memcached分布式缓存初体验
1 Memcached简介/下载/安装 Memcached是一个高性能的不是内存对象缓存系统,用于动态Web应用以减轻数据库负载.Memcached基于一个存储键/值对的HashMap.其客户端可以使 ...
- 缓存应用--Memcached分布式缓存简介
一. 什么是Memcached Memcached 是一个高性能的分布式内存 对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象 来减少读取数据库的次数,从而提供动态. ...
随机推荐
- 关于Hibernate XXX is not mapped 错误
我的实体类是这么配置的 @Entity(name="EntityName") //必须,name为可选,对应数据库中一的个表 就会出现 XXX is not mapped. ...
- JVM 垃圾回收器工作原理及使用实例介绍(转载自IBM),直接复制粘贴,需要原文戳链接
原文 https://www.ibm.com/developerworks/cn/java/j-lo-JVMGarbageCollection/ 再插一个关于线程和进程上下文,待判断 http://b ...
- for 小曦
安装GO 当前版本1.6.2 http://blog.163.com/hehaifeng1984@126/blog/static/690011362013101044011568/ 教程 https: ...
- 自己用C语言写dsPIC / PIC24 serial bootloader
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). HyperBootlo ...
- 自己用C语言写单片机PIC16 serial bootloader
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 为什么自己写bootl ...
- Spring boot开发过程遇到的一些小问题
1.无法将yml文件自动注入到对应的类的实例中去: pom.xml文件里没有加如下依赖 <dependency> <groupId>org.springframework.bo ...
- 41个Web开发者JavaScript实用小技巧
1. 将彻底屏蔽鼠标右键 oncontextmenu="window.event.returnValue=false" < table border oncontextmen ...
- Generate transparent shape on image
Here is an example code to generate transparent shape on image. Need to pay attention can not use cv ...
- TJI读书笔记16-异常处理
TJI读书笔记16-异常处理 概念 基本异常情形 异常的捕获 自定义异常 异常说明 捕获所有异常 栈轨迹 重新抛出异常 Java标准异常 使用finally 异常的限制 构造器 异常的匹配 其他乱七八 ...
- 【231】◀▶ 利用 IDL 读取 TIFF 数据
参考:Create Latitude/Longitude Arrays for GeoTIFF Image 用到的函数为 READ_TIFF,通过此函数可以获取 TIFF 数据的数组信息,同时可以获取 ...