memcached为何物?

本文介绍了memcached的基本原理及其内部实现机制,包括其作为一个高性能分布式内存对象缓存系统的运作方式,以及如何通过维护一个巨大的hash表来存储各种格式的数据。
一次听出 memcached是在 JavaEye上。好多人在讨论通过memcached保存一些信息,减少对数据库的操作。从其他网站上了解了一些关于它的说明:
memcached是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。

memcached的代码非常少,只有6个标准C文件,代码行也不多,估计花一天时间就可以研究透彻。

首先了解memcached的中心思想,就如上面所说的,是一个巨大的hash表,就key,value对。客户端通过socket设置、获得、替换、删除key以及对应的value。这么说来还是比较简单的。

memcached.c为程序的主代码,包含了入口main、处理socket协议等功能。它使用了libevent处理协议,在Linux下是epoll方式。

slabs.c内存管理模块,就是存储客户端需要设置的key和value。slabs事先创建一系列不同字节数的数组,比如默认情况下创建8K个128字节数组,4K个256字节数组,2K个512字节数组等,依次类推,当然字节数不同,相应的数组大小也是不同的,这里的128、256等数值对应的1,2等称为clsid,clsid最大为200,最大字节数为1M(所以上面描述能够保存图片和视频是不可能的)。memcached武断地认为字节数越大,出现的几率越小,数组大小也越小。难道实际情况就是这样的吗?

items.c主要功能是处理key、value,当然远没有这么简单。它使用了链表保存不同的item。其中不同长度的key+value对应的item放到最接近clsid的数组中,比如长度为200的就放到256对应的数组中,呵呵,还挺浪费的。这里有两个链表,一个是clsid相同的item组成一个链表,这个链表是双向的,它们的clsid都相同;另外一个就是key的hash值相同的链表,这个链表是单向的,主要解决hash冲突的,它们的hash值都相同。这也是查找key的最快方法,为什么不用红黑树呢?

assoc.c就比较简单了,就是一个大数组,以item中key的hash值为数组的下标,数组的值就是一个item值,由于item是链表,所以后面就有一组相同hash值的item链表。

daemon.c是精灵程序代码,纳闷为什么只fork了一次,按照经典的做法是要fork两次的。

thread.c是处理多线程的代码,由于memcached是非阻塞的方式处理socket的(使用libevent特性),理论上讲多线程不会提升性能,除非有多个CPU,一个CPU对应一个线程。

整个代码中,自己感觉“池子”很多,这可能是从性能上考虑的吧。比如slabs、thread中都使用到了内存池,thread中使用了线程池(比较简单而已)。

memcached代码写得比较简洁,实现很巧妙,性能也非常高。

为了帮助你更好地掌握在华为FusionStage平台上实现高效数据缓存策略的方法,推荐阅读《华为FusionStage: 分布式缓存、消息与数据库中间件详解》。这本书将为你提供全面的分布式缓存中间件知识,包括Redis和Memcached的技术原理与应用特点。 参考资源链接:[华为FusionStage: 分布式缓存、消息与数据库中间件详解](https://wenku.youkuaiyun.com/doc/6yhus2j2aq?spm=1055.2569.3001.10343) 在设计分布式缓存策略时,首先要考虑的是数据访问模式和系统对缓存的一致性要求。例如,Redis支持多种数据结构和持久化机制,适合需要快速读写和持久化保证的场景。而Memcached以其高性能和简单性著称,适用于读操作远多于写操作的简单缓存需求。 具体实施步骤包括: 1. 分析应用的数据访问模式,识别出热点数据和不常变化的数据。 2. 根据数据的特点,选择合适的缓存策略,如缓存穿透、缓存雪崩和缓存击穿的预防措施。 3. 利用Redis或Memcached的分布式特性,设置合理的缓存容量和缓存淘汰策略,以避免缓存过期导致的性能下降。 4. 配置FusionStage平台的缓存实例,包括内存分配、端口设置、网络配置等。 5. 根据业务特点,可能还需要实现客户端的逻辑来管理缓存的读写,以及处理缓存和数据库之间的同步问题。 掌握了这些策略和操作后,你将能够有效地利用华为FusionStage平台上的分布式缓存中间件来提升业务系统的性能。为了进一步深化理解并扩展知识面,建议继续参阅《华为FusionStage: 分布式缓存、消息与数据库中间件详解》中关于消息中间件和数据库中间件的详细介绍,以获得更全面的技术视野。 参考资源链接:[华为FusionStage: 分布式缓存、消息与数据库中间件详解](https://wenku.youkuaiyun.com/doc/6yhus2j2aq?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值