`
san_yun
  • 浏览: 2639324 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

memcached的一些总结

 
阅读更多
我们之前对排行榜的数据进行缓存,由于排行榜在我们所有sql select查询里面占了30%,而且我们排行榜每小时更新一次,所以必须对数据做缓存。为了清除缓存方便,把所有的用户的数据放在同一key中,由于 memcached:set的时候没有压缩数据。在测试服测试的时候,没发现问题,当上线的时候,结果发现,在线人数刚刚490人的时候,服务器load average飘到7.9。然后我们去掉缓存,一下子就下降到0.59。

所以Memcahce不适合缓存大数据,超过 1MB的数据 ,可以考虑在客户端压缩或拆分到多个 key 中。大的数据在进行load和uppack到内存的时候需要花很长时间,从而降低服务器的性能。

Memcached 支持最大的存储对象为 1M 。这个值由其内存分配机制决定的。

1.memcached是原子的吗?

所有的被发送到memcached的单个命令是完全原子的。如果您针对同一份数据同时发送了一个set命令和一个get命令,它们不会影响对方。它 们将被串行化、先后执行。即使在多线程模式,所有的命令都是原子的。然是,命令序列不是原子的。如果首先通过get命令获取了一个item,修改了它,然 后再把它set回memcached,系统不保证这个item没有被其他进程(process,未必是操作系统中的进程)操作过。

   memcached 1.2.5以及更高版本,提供了gets和cas(check and set)命令,它们可以解决上面的问题。如果使用gets命令查询某个key的item,memcached会返 回该item当前值的唯一标识。如果客户端程序覆写了这个item并想把它写回到memcached中,可以通过cas命令把那个唯一标识一起发送给 memcached。如果该item存放在memcached中的唯一标识与您提供的一致,写操作将会成功。如果另一个进程在这期间也修改了这个 item,那么该item存放在memcached中的唯一标识将会改变,写操作就会失败。

2.什么是二进制协议,是否需要关注?

二进制协议尝试为端提供一个更有效的、可靠的协议,减少客户端/服务器端因处理协议而产生的CPU时间。根据Facebook的测试,解析ASCII协议是memcached中消耗CPU时间最多的环节。

3.memcached对item的过期时间有什么限制?

item对象的过期时间最长可以达到30天。memcached把传入的过期时间(时间段)解释成时间点后,一旦到了这个时间点,memcached就把item置为失效状态,这是一个简单但obscure的机制。

4. memcached的内存分配器是如何工作的?为什么不适用malloc/free!?为何要使用slabs?

实际上,这是一个编译时选项。默认会使用内部的slab分配器,而且确实应该使用内建的slab分配器。最早的时候,memcached只使用 malloc/free来管理内存。然而,这种方式不能与OS的内存管理以前很好地工作。反复地malloc/free造成了内存碎片,OS最终花费大量 的时间去查找连续的内存块来满足malloc的请求,而不是运行memcached进程。slab分配器就是为了解决这个问题而生的。内存被分配并划分成 chunks,一直被重复使用。因为内存被划分成大小不等的slabs,如果item的大小与被选择存放它的slab不是很合适的话,就会浪费一些内存。

可以参考:memcached server LRU 深入分析 http://www.iteye.com/topic/225692

5. memcached能接受的key的最大长度是250个字符

memcached能接受的key的最大长度是250个字符。需要注意的是,250是memcached服务器端内部的限制。如果使用的 Memcached客户端支持"key的前缀"或类似特性,那么key(前缀+原始key)的最大长度是可以超过250个字符的。推荐使用较短的key, 这样可以节省内存和带宽。

6.不适用memcached的业务场景?

1)缓存对象的大小大于1MB

Memcached本身就不是为了处理庞大的多媒体(large media)和巨大的二进制块(streaming huge blobs)而设计的。

2)key的长度大于250字符

3)虚拟主机不让运行memcached服务

4)业务本身需要的是持久化数据

分享到:
评论

相关推荐

    memcached学习总结

    ### Memcached学习总结 #### 一、Memcached简介 ##### 1.1 什么是Memcached? Memcached是一款由Danga Interactive公司(LiveJournal的技术团队)所研发的分布式内存对象缓存系统,它最初是为了减轻数据库负载和...

    memcached安装使用总结.wps

    memcached 共享内存解决方案,memcached安装,使用

    memcached安装包以及MemCachedClient

    总结,Memcached 是一个高效的分布式缓存系统,结合 libevent 可进一步提升性能。在Java环境中,可以使用 Spymemcached 客户端进行交互,通过 Commons Pool 管理连接池,利用 SLF4J 进行日志记录。在实际应用中,...

    Memcached使用点滴总结分享.docx

    Memcached 使用点滴总结分享 Memcached 是一种高性能的缓存系统,可以用来存储...作者还讨论了在使用 Memcached 时需要注意的一些问题,例如计数器机制的使用方法和注意事项,以及实现定时任务时需要考虑的一些问题。

    memcached完全剖析ehcache memcached redis 缓存技术总结

    标题“memcached完全剖析ehcache memcached redis 缓存技术总结”表明,这篇内容将深入探讨三种流行的缓存技术——Memcached、Ehcache和Redis。缓存是IT行业中用于提高系统性能的关键技术,尤其是在大数据量和高并发...

    memcached安装软件 libevent magent memcached

    总结,memcached的安装和配置涉及libevent的安装,用于提供事件驱动功能;magent的安装用于管理和监控memcached服务;而memcached自身则负责缓存数据,提升Web应用性能。正确安装和配置这三个组件,可以确保...

    windows下memcached+memcached.dll 5.3.8

    总结来说,这个主题涉及了Windows环境下Memcached的安装、配置和使用,以及与PHP的集成。通过安装和配置Memcached,可以显著提升基于PHP的Web应用程序的性能,减少对数据库的直接访问,提高响应速度。

    memcached.exe及memcached.dll

    **Memcached:高性能分布式...总结来说,Memcached是一个高效、轻量级的内存缓存解决方案,广泛应用于需要快速数据访问的场景。正确配置和使用memcached.exe和memcached.dll,可以为你的应用程序带来显著的性能提升。

    memadmin+php_memcached+memcached1.4.5

    Memcached 1.4.5是一个较旧的版本,发布于2010年,可能包含一些特定的特性、优化和修复的bug。尽管现在有更现代的版本,但在某些特定场景下,用户可能会选择使用这个特定的稳定版本。 **php_memcached**: `...

    memcached全面剖析.pdf

    总结而言,memcached凭借其高性能、简单协议、易于扩展和部署的特性,成为Web应用中不可或缺的缓存解决方案。理解和掌握memcached的原理与应用对于开发高性能的Web应用至关重要。随着新特性的不断加入,memcached正...

    Memcached 统计与监控

    除了使用Telnet进行基本的监控外,还有一些更高级的方法来监控Memcached,如使用第三方监控工具或自定义脚本来实现更复杂的监控需求。 ##### 5.1 第三方监控工具 市面上有许多成熟的监控工具支持Memcached的监控,...

    memcached-1.5.4

    总结,`memcached-1.5.4`是实现高效缓存的关键组件,其源码的阅读与编译有助于深入理解内存缓存的工作原理,优化Web应用性能。通过熟悉`memcached`的配置、运行以及与其他技术的集成,开发者可以更好地利用此工具来...

    memcached-1.2.1-win32.zip 和 java_memcached-release_1.6.zip

    **总结** 这两个压缩包文件为Java开发者提供了实现高效数据缓存的完整工具链。`memcached-1.2.1-win32.zip` 提供了Memcached服务端,而`java_memcached-release_1.6.zip` 提供了Java客户端,使得开发者能够轻松地在...

    memcached-1.5.11.tar.gz

    总结,Memcached 1.5.11版作为一款轻量级的缓存系统,以其高效、易用的特点在众多项目中得到了广泛应用。通过深入理解其工作机制和优化策略,开发者能够更好地利用这一工具提升系统的性能。同时,根据实际业务需求,...

    memcached连接demo

    总结起来,"memcached连接demo"旨在展示如何在不同编程环境下连接和操作Memcached,帮助开发者快速集成和利用这个强大的缓存系统,提升应用程序的性能。通过学习这些示例,你将能够自如地在自己的项目中使用...

    memcached客户端文件及服务端

    **总结** "memcached-win32-bin"是一个32位Windows版的Memcached服务端安装包,提供了在Windows环境中部署和运行Memcached的基础。配合客户端库(如dll文件),可以方便地在各种编程语言中与Memcached服务端进行...

    memcached-1.5.16.tar.gz

    总结,memcached-1.5.16作为一款强大的缓存工具,提供了高效、灵活的内存存储方案。正确地理解和运用它,能显著提升Web应用的性能,降低数据库压力。通过深入学习和实践,我们可以充分利用memcached的优势,为我们的...

    memcached缓存

    总结,memcached作为高效缓存工具,配合Java客户端库,可以在Web应用中实现快速的数据访问。无论是Windows还是Linux环境,都有简单的方法进行安装和配置。理解并掌握这些知识点,对于提升Web应用性能具有重要意义。

Global site tag (gtag.js) - Google Analytics