为什么标题称Memcached为伪分布式内存缓存呢?
1. Memcached服务端没有集群化方案,存在单点故障的风险。
2. Memcached服务端没有持久化机制,数据存放在内存中,进程退出数据丢失。
1. Memcached安装与使用
下载地址:http://www.memcached.org/files/memcached-1.4.34.tar.gz
Memcached依赖libevent库:
apt-get install libevent-dev
yum install libevent-devel
其它系统安装脚本可以自己搜索......
解压memcached-1.x.x.tar.gz安装包:
wget https://memcached.org/latest [you might need to rename the file] tar -zxf memcached-1.x.x.tar.gz cd memcached-1.x.x ./configure --prefix=/usr/local/memcached make && make test && sudo make install
2. Memcached内存管理机制
说明:memcached服务端进程启动,通过 -m 参数分配一块指定大小的内存区域(默认:64M)。
memcached内存划分机制如图,首先理解几个概念:
1. Slab Class: 内存大小相同的Slab属于一个Slab Class,通过 -f 参数区分每个Slab的内存区块增长
2. Slab: 包含多个Chunk,每个Slab(默认:1M)按照最小内存大小进行切分
3. Chunk: 存储 [K-V] 数据的最小内存单元,通过 -n 参数指定最小内存分配空间
启动参数参考(部分命令未用过,注意是否支持):
-p 指定端口号(默认: 11211)
-U <num> UDP监听端口 (默认: 11211, 0 时关闭)
-s <file> 用于监听的UNIX套接字路径(禁用网络支持)
-a <mask> UNIX套接字访问掩码,八进制数字(默认:0700)
-m 指定最大使用内存大小(默认:64MB)
-t 线程数(默认:4)
-l <ip_addr> 绑定地址 (默认:允许所有地址绑定,存在安全隐患)
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-u <username> 绑定使用指定用于运行进程 <username> (只有root用户可以使用这个参数)
-P <file> 将PID写入文件<file>,这样可以使得后边进行快速进程终止, 需要与 -d 一起使用
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数(默认:1024)
-f 块大小增长因子(默认:1.25)
-n <bytes> 最小分配空间,key+value+flags默认是48
-k 锁定所有内存页。注意你可以锁定的内存上限。试图分配更多内存会失败的,所以留意启动守护 进程时所用的用户可分配的内存上限。(不是前面的 -u <username> 参数;在sh下,使用命 令"ulimit -S -l NUM_KB"来设置)
-v 提示信息(在事件循环中打印错误/警告信息)
-vv 详细信息(还打印客户端命令/响应)
-vvv 超详细信息(还打印内部状态的变化)
-h 打印这个帮助信息并退出。
-i 打印memcached和libevent的许可。
-L 尝试使用大内存页(如果可用的话)。提高内存页尺寸可以减少"页表缓冲(TLB)"丢失次数,提 高运行效率。为了从操作系统获得大内存页,memcached会把全部数据项分配到一个大区块
-D <char> 使用 <char> 作为前缀和ID的分隔符。这个用于按前缀获得状态报告。默认是":"(冒 号)。如果 指定了这个参数,则状态收集会自动开启;如果没指定,则需要用命令"stats detail on"来开启
-R 每个连接可处理的最大请求数
-C 禁用CAS
-b 设置后台日志队列的长度(默认:1024)
-B 绑定协议 - 可能值:ascii,binary,auto(默认)
-I 重写每个数据页尺寸。调整数据项最大尺寸
客户端写入命令,服务端的处理流程大致如下图:
3. Memcached如何解决单点故障?
方案一:采用客户端分片,例如:一致性哈希
方案二:引入中间层代理,例如:Twemproxy
4. Memcached如何支持高可用方案?
1. 主备复制:http://repcached.lab.klab.org/
引入主备复制方案后,实践中可以结合LVS作为前端负载均衡,以及Keepalived节点心跳检查。网上的架构案例非常多LVS+Keepalived+Twemproxy。总之,具体的方案落地结合具体的业务场景去设计。
5. 简单企业架构设计
图中仅显示Memcached在企业架构中充当的角色,之所以称为简单企业架构,由于以上所描述的架构图在实践中依然存在许多细节性的问题,而这些问题也算比较严重,甚至影响到系统运行的稳定性。实际开发中应该根据业务特点进行适当的调整或者重新设计。
6. 性能测试报告
[待补充]
相关推荐
Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。Memcached通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及...
分布式缓存客户端MemcachedProviders是IT领域中一种用于提高应用程序性能和可伸缩性的关键工具。Memcached是一种广泛使用的开源高性能、分布式内存对象缓存系统,它可以存储数据并提供高速访问,减轻数据库负载,...
此外,memcached支持多服务器环境下的分布式缓存,这意味着数据可以在多台服务器间共享,进一步提升系统的可扩展性。 ### 二、PHP内存缓存技术memcached安装 在PHP环境中安装memcached,首先需要从官方下载...
分布式缓存 Redis + Memcached 经典面试题!
分布式缓存系统是现代Web应用中提升性能的关键技术之一,Memcached作为其中的代表,以其高性能、简单易用的特点被广泛采用。Memcached是一个开源的、基于内存的分布式缓存解决方案,主要目的是减少对数据库的访问,...
分布式缓存系统在现代Web开发中扮演...总的来说,分布式缓存系统Memcached是现代Web应用中不可或缺的工具。通过深入学习和实践,我们可以充分利用其优势,优化应用性能,减轻数据库压力,从而提供更高效、稳定的服务。
Memcached 分布式缓存学习 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态 Web 应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。 ...
分布式缓存是现代大型互联网应用不可或缺的技术之一,主要用于提高数据访问速度,降低数据库负载。Redis 和 Memcached 是其中最常用的两种分布式缓存系统。这里我们将深入探讨 Redis 和 Memcached 的核心概念、优...
### Memcached分布式缓存 #### 一、Memcached的基础 **1.1 Memcached是什么?** Memcached是一款高性能、分布式内存对象缓存系统,旨在通过减轻数据库负担来加速动态网络应用的速度。它通过在内存中缓存数据和...
分布式缓存Memcached实例详解 Memcached是一款由Danga Interactive公司设计并开发的高效、分布式内存对象缓存系统。它的主要目标是减轻数据库的负担,提高动态应用程序的响应速度,通过将数据存储在内存中,使得...
**Memcached分布式缓存入门** Memcached是一款高性能、分布式内存对象缓存系统,它被广泛应用于Web应用中,用于减轻数据库的负载,提高数据访问速度。这个“Memcached分布式缓存入门”资料将引导初学者深入理解...
Memcached是一个高性能的分布式的内存对象缓存系统.它的缓存是一种分布式的,也就是可以允许不同主机上的多个用户同时访问这个缓存系统,这种方法不仅解决了共享内存只能是单机的弊端,同时也解决了数据库检索的压力...
确保数据的一致性是分布式缓存的重要挑战。常见的更新策略有Write-Through(写直达)、Write-Around(写绕过)和Write-Behind(写后更新)。 4. 结论 分布式数据缓存技术在应对高并发、大数据量的现代应用中起着至...
2. 分布式缓存技术:Memcached Memcached是一种高性能的分布式内存对象缓存系统,用于缓存数据和对象,减少数据库的查询次数,从而减轻数据库服务器的压力,并提高数据的访问速度。在文档中,油田信息查询系统应用了...
cachelot, 缓存库和分布式缓存服务器 Memcached兼容 什么是Cachelot库如果应用程序需要一个以光速工作的LRU缓存。 这就是Cachelot库的意思。库与固定预先分配的内存一起工作。 你告诉内存大小,LRU缓存已经就绪。...
Memcached作为一种流行的分布式缓存系统,通过在内存中缓存数据和对象,显著提高了Web应用的响应速度和性能。分布式缓存通过将缓存数据分布在多个服务器节点上,能够实现负载均衡、容错、以及数据一致性,这些特性...