`
tenyears
  • 浏览: 206710 次
  • 性别: Icon_minigender_1
  • 来自: 湖北武汉
文章分类
社区版块
存档分类
最新评论

memcached为何物?

阅读更多
一次听出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代码写得比较简洁,实现很巧妙,性能也非常高。

分享到:
评论

相关推荐

    10.1.1 redis相比memcached有哪些优势?.md

    10.1.1 redis相比memcached有哪些优势?

    memcached使用最佳实践(英文版)

    #### 1.5 如何配置Memcached? Memcached服务器的配置主要是通过命令行参数完成的,最常见的是设置最大可用内存大小(-m)、监听的IP地址(-l)和端口(-p)。此外,还可以设置各种其他选项,如是否启用统计信息(-...

    memadmin_监听memcached

    "memadmin_监听memcached" 这个标题揭示了我们讨论的核心工具——`memadmin`,它是一个专门用于监控`memcached`服务的工具。`memcached`是一个广泛使用的分布式内存对象缓存系统,常用于提高Web应用的性能,通过将...

    memcached 64位 window

    **标题与描述解析** ...总的来说,Memcached 64位 window为Windows环境提供了强大的内存缓存解决方案,可以有效提升依赖数据库的应用性能。正确配置和使用Memcached,能显著改善用户体验,降低服务器压力。

    memcached windows稳定版

    在终端(也即cmd命令界面)下输入 ‘c:\memcached\memcached.exe -d install’ 安装 3. 再输入: ‘c:\memcached\memcached.exe -d start’ 启动。NOTE: 以后memcached将作为windows的一个服务每次开机时自动启动...

    memcached安装软件 libevent magent memcached

    接下来是magent,也称为管理代理,它为memcached提供了一个用户界面和监控工具。`magent.tar.gz`就是这个工具的源代码包。安装magent可以帮助我们更好地管理和监控memcached服务的状态,包括查看缓存统计、设置内存...

    memcached安装包以及MemCachedClient

    **Memcached 安装与使用详解** Memcached 是一款高性能的分布式内存缓存系统,用于在Web应用中减轻数据库负载。它将数据存储在内存中,以键值对的形式提供快速访问,尤其适用于高并发场景。Memcached 使用简单,可...

    memCached 学习

    memcached是什么? memcached的特征 协议简单 基于libevent的事件处理 内置内存存储方式 memcached不互相通信的分布式 安装memcached memcached的安装 memcached的启动 用客户端连接 使用Cache::Memcached 使用Cache...

    memcached服务器端memcached.exe 下载

    标题“memcached服务器端memcached.exe 下载”指的是获取memcached服务端的可执行文件,`memcached.exe`是Windows环境下运行memcached服务的程序。这个绿色版的memcached意味着它无需安装,下载解压后即可直接运行,...

    安装Memcached及Memcached配置

    - `limit_maxbytes`: 分配给Memcached的内存大小(以字节为单位)。 - `cmd_get`: get命令的总请求次数。 - `evictions`: 为获取空闲内存而删除的项目数。 - `total_connections`: 已建立的连接总数。 - 其他...

    windows下memcached+memcached.dll 5.3.8

    标题中的“Windows下memcached+memcached.dll 5.3.8”指的是在Windows操作系统上安装和使用Memcached服务的场景,其中`memcached.dll 5.3.8`是Memcached服务器的一个特定版本的动态链接库文件。Memcached是一款高...

    php7 的memcached扩展php_memcached.dll扩展

    // 存储数据,过期时间为1小时 } echo $value; ?> ``` 在实际应用中,Memcached可以配合其他缓存策略,如LRU(Least Recently Used)和TTL(Time To Live)来管理内存,优化数据存储和访问效率。此外,...

    python-memcached python-memcached

    Python-memcached库则为Python开发者提供了一个简单易用的接口,能够方便地将数据存储和检索到Memcached服务器上。 这个库的主要功能包括: 1. **键值存储**:Python-memcached允许开发者使用键(key)和值(value...

    using memcached

    #### 六、如何配置Memcached? 配置Memcached主要包括以下几个方面: 1. **内存分配**:决定分配给Memcached的内存大小。 2. **监听地址和端口**:指定Memcached监听的网络接口和端口号。 3. **安全设置**:例如...

    memcached命令

    这条命令表示启动memcached服务,监听IP地址为127.0.0.1,分配给memcached的最大内存为1GB,监听端口为11222。 2. **安装memcached服务并指定服务名称、监听端口等** - 示例:`sccreate "memcached" start=auto ...

Global site tag (gtag.js) - Google Analytics