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应用以减轻数据库负载.它通过在内存中缓存数据和对象 来减少读取数据库的次数,从而提供动态. ...
随机推荐
- 二模12day2解题报告
T1.笨笨玩糖果(sugar) 有n颗糖,两个人轮流取质数颗糖,先取不了的(0或1)为输,求先手能否必胜,能,输出最少几步肯定能赢:不能,输出-1. 一开始天真的写了一个dp,f[i]表示i颗糖最少取 ...
- 在网页中嵌入地图API
1.登录百度地图api,地址:http://api.map.baidu.com/lbsapi/creatmap/index.html 2.设置你的地理位置 3.简单设置下地图功能.地图的宽度和高度根据 ...
- 2016-09-19: linux后台运行
linux后台运行命令两种方式: 1. command & : 后台运行,你关掉终端会停止运行 2. nohup command & : 后台运行,你关掉终端也会继续运行 简介 L ...
- 移动端rem页面详谈
rem布局是移动端常见的布局之一,也是较为成熟的方案.接下来就详细说以下rem布局的实际操作. 1.首先加<meta />标签,设置视口的大小,不多说. <meta name=&qu ...
- pdo 整套类的封装,保存修改查询
<?php /** * */ class Db{ private $host = ''; private $port = ''; private $user = ''; private $pas ...
- 用CMake屏蔽Release运行时的控制台窗口
在默认情况下,CMake构建的VS工程运行时会弹出控制台窗口,可以通过手动方式进行屏蔽,也可以通过CMake命令进行屏蔽. 手动方式:分为两步 第一步:右击VS项目,选择"属性"- ...
- 巧用vsprintf将浮点数等转化字符串
直接上代码 #include <stdarg.h> ]; int vspf(char *fmt, ...) { va_list argptr; int cnt; va_start(argp ...
- ajax同步异步问题
之前一直在写JQUERY代码的时候遇到AJAX加载数据都需要考虑代码运行顺序问题.最近的项目用了到AJAX同步.这个同步的意思是当JS代码加载到当前AJAX的时候会把页面里所有的代码停止加载,页面出去 ...
- CSS3 04
animate.css库的使用 官网:https://daneden.github.io/animate.css/ 作用:将一切常见的动画直接封装,开发者不需要考虑实现过程,只需要添加对应的类就能实现 ...
- C# MVC ( 将控制器的实体类注册到视图 )
(1)控制器 代码 using System; using System.Collections.Generic; using System.Linq; using System.Web; usin ...