Memcached 理论篇

本文详细介绍了Memcached的基本架构、事件处理、数据存储、数据淘汰策略以及分布式存储原理,帮助开发者全面掌握这一高性能缓存系统。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Memcached 应用非常广泛的一个开源Cache,它是一个在内存中存储key-value的程序,能够以守护进程的形式运行在服务器上,作为数据库到用户之间的缓存。key-value数据全部存储在内存中,不使用硬盘交换区。

我决心要学习一下Memcached。因为它在内存管理、海量数据存储、分布式算法、异步事件响应、网络编程方面。对它的学习分为三个部分:理论上、用法上、源码实现上。

下面是理论篇。

C/S架构

在存储中存储key-value的进程就是memcached服务器,由C语言实现。对应的,访问memcached服务器数据的程序是memcached客户端,客户端有很多种实现,用不同的语言支持不同的场景。客户端与服务器端一般通过TCP连接通信。
客户端与服务器端通信的数据有两类:一类叫做 text lines,作为操作指令。另一类叫做 unstructured data,这是要存储或访问的数据,之所以叫unstructured ,是因为服务器不考虑数据的格式,只当做字节流


事件处理方式

Memcached使用libevent来响应事件。libevent是处理异步事件的程序库,将epoll、kqueue等事件处理功能封装统一起来。


数据存储方式

Memcached使用slab分配机制来管理内存的利用。
所有cache数据都存在内存中。预先把内存分成各种尺寸的块(chunk),相同尺寸的块是一个组(slab class)。
memcached保持着空闲chunk的列表,然后需要的时候根据到来数据的大小选择最合适大小的chunk。
chunk是预先定义好大小的,所以不会进行切分,因而chunk内部是有小碎片的。
调整growth factor参数可以调整slab class大小的差别梯度。

数据淘汰方式
1、cache中的每条数据有时间戳。当数据被访问t时才查看时间戳,如果超时就淘汰。
2、LRU淘汰


分布式数据存储

memcached可以被轻松的打造成分布式存储系统。主要的分布式计算工作位于memcached的客户端,而memcached服务器可以简单的集群。
1、首先计算hash,使用的是crc32摘要算法
2、然后根据服务器个数求余
3、采用一致性hash算法。(增加服务器个数的扩展性、避免负载的不均衡)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值