`
jarfield
  • 浏览: 202693 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Memcached FAQ(1) 一般性的问题

阅读更多

最后更新时间 2009-04-10 更新人 dormando@rydia.net
这里收集了经常被问到的关于memcached的问题

一般的问题

什么是memcached?
memcached是一个高性能的、分布式的、内存对象缓存系统。memcached本质上是一个通用的缓存系统,但是它通常被用来减小数据库的负载,以达到加速dynamic web应用的目的。


Dange Interactive (开发memcached的组织机构,译者注)开发memcached的目的是,加快LiveJournal.com 的速度。 LiveJournal.com 这个网站拥有大量的web server和database server,每天访问的用户数高达1百万,每天的动态网页PV高达2千万+。有了memcached,数据库就跟没事一样,其负载被大大减小。Memcached加快了动态网页的响应时间,提高了资源利用率,加快了memcached不命中时数据库的访问速度。

从哪获得memcached?
到这个下载页面 下载吧!

怎么安装memcached?
可以参考安装指南 ,也可以使用操作系统的软件包管理系统来自动下载安装(apt, yum等)。
如果您的linux发行版没有memcached,或者有了memcached但版本不够新,您还可以从源代码安装。从我们的下载页面获得源代码的tar包,然后在shell中执行以下命令:
$ tar -zxvf memcached-1.x.x.tar.gz
$ ./configure --enable-threads (如果您想使用多线程工作方式)
$ make
$ make test
$ sudo make install
您可以使用'./configure --help' 可以查看所有的选项。

哪些平台可以运行memcached?
任何有空闲内存的地方都可以!Memcached可以运行在linux、BSD、windows。它只需要很少的CPU时间,所以无论哪里有空闲内存,哪里就可以运行它。

什么情况下适合使用memcached?
如果您的网站包含了访问量很大的动态网页,因而数据库负载很高,而且大部分数据库请求都是读操作,那么memcached可以帮您显著地减小数据库负载。


Memcached同样适用在其他很多场合。至于到底适用哪些场合,您可以通读Memcached FAQ和相关的指南来获得一些灵感。如果您的数据库负载比较低但CPU使用率很高,您可以缓存计算好的结果( computed objects )和渲染后的模板(enderred templates)。通过memcached,您可以缓存session数据、临时数据以减少对他们的数据库写操作,缓存一些很小但是被频繁访问的文件, 缓存Web 'services'(非IBM宣扬的Web Services,译者注)或RSS feeds的结果...

即使您的资源(CPU、内存、数据库等,译者注)很充足,memcached至少也可以帮您加快页面的渲染速度。

什么情况下不适合适用memcached?
参见这里 。(下面也翻译这个页面)

Memcached的确很棒!但也不是每种场合都适用...

  • 对象的大小大于1MB
    • Memcached本身就不是为了处理庞大的多媒体(large media)和巨大的二进制块(streaming huge blobs)。
    • 考虑其他的条件:http://www.danga.com/mogilefs
  • key的长度大于250字符
    • 如果真的用了这么长的key,那么您什么地方可能做错了。
    • 还有,可以看看关于key长度的邮件列表。
  • 您的虚拟主机不让您运行memcached
    • 如果您的应用托管在低端的虚拟私有服务器(virtual private server, a slice of a machine)上,像vmware, xen这类虚拟化技术并不适合运行memcached。Memcached确实需要接管和控制大块的内存--如果memcached的内存被OS或 hypervisor交换出去,memcached的性能将大打折扣。
  • 您的应用运行在不安全的环境中
    • 记住,任何人仅仅通过telnet就可以访问到您的memcached。如果您的应用运行在共享的系统上,要盯紧哦!
  • 您需要持久化数据,或者说您需要的应该是database
    • 如果您仅仅期待memcached提供SQL接口,那么您可能需要重新思考一下对cache和memcached的理解。如果想对这个问题有更多的了解,庆参考下面dormando写的blog。
  • links

怎么访问memcached?

一般来说,您的应用可以使用memcached的客户端库来访问一个或多个memcached。

这个客户端页面上列出了所有可用的API库,包括Perl, C, C#, PHP, Python, Java, Ruby, PostgreSQL的存储过程及触发器。

您可以根据memcached协议 编写自己的客户端库。

怎么把memcached当成database使用?

如果您想把memcached用作数据存储媒介而不是缓存,那么您应该使用database。MySQL Cluster拥有一些与memcached类似的特性(尽管MySQL Cluster安装并不容易),而且MySQL Cluster完全可以胜任一个可靠的分布存储媒介。

能够遍历memcached中所有的item吗?

不!Memcached不支持也不计划支持这个操作。这个操作的速度相对缓慢且阻塞其他的操作(这里的缓慢时相比memcached其他的命令)。如前面所说,memcached是一个缓存,不是数据库。Tugelamemcachedb 是memcached派生出的系统,它们速度比较慢,但是行为更有点像数据库。

当然,memcached毕竟是软件,所以从某种角度说,答案最终肯定是YES。但是这个操作确实慢而且阻塞memcached。对于开发和测试服务器来说,这不是问题,但是对于99.9%的真正部署来说,答案是NO。

我们前面提到的“阻塞memcached”究竟是什么意思呢?memcached所有非调试(non-debug)命令,例如add, set, get, fulsh这些命令,无论memcached中存储了多少数据,它们的执行都只消耗常量时间。任何遍历所有item的命令执行所消耗的时间,将随着memcached中数据量的增加而增加。当其他命令因为等待(遍历所有item的命令执行完毕)而不能得到执行,阻塞就发生了。

也许您可以说,“删除我所有的key”这个命令平均只花费半秒钟,我有足够的CPU空闲时间,我隔几秒钟才执行一次这个命令,那么还有什么问题吗(还不能遍历所有的item吗)?(当然有问题)因为这半秒钟,其他的请求都至少延迟半秒钟。It'll take as long as it takes the hardware to process through that queue in order to catch up. So all of your other requests end up taking too long.

所以我们努力不做这样的事情。如果您确实需要遍历所有的item,考虑使用MySQL吧,使用主键访问数据,您还可以使用一个辅助索引加快搜索速度。

分享到:
评论

相关推荐

    memcached1

    最近一直在做一个项目的前期设计工作,考虑到后期系统的扩展和性能问题也找了很多解决方法,有一个就是用到了数据库的缓存工具memcached(当然该工具并不仅仅局限于数据库的缓存)。先简单的介绍下什么是memcached。...

    Windows 下安装 Memcached1

    1. **安装服务**:使用管理员权限运行以下命令将Memcached安装为服务。 ```cmd C:\memcached\memcached.exe -d install ``` 注意替换真实的路径,并确保以管理员身份运行命令提示符。 2. **启动服务**:使用...

    memcached安装包以及MemCachedClient

    在 Memcached 项目中,它可能包含安装步骤、配置选项、命令行参数、常见问题解答等内容。 总结,Memcached 是一个高效的分布式缓存系统,结合 libevent 可进一步提升性能。在Java环境中,可以使用 Spymemcached ...

    memcached-2.2.0RC1.tgz

    在2.2.0RC1版本中,可能引入了新的特性、优化了性能或者修复了已知问题,具体变化需要查看源代码或官方发布的变更日志来确定。 在安装和部署方面,用户通常需要先解压“memcached-2.2.0RC1.tgz”,然后通过编译源...

    安装memcached出现异常

    ### 安装memcached出现异常:具体问题及解决方案 #### 一、问题概述 在安装memcached的过程中,可能会遇到各种各样的错误。其中一种常见的情况是,在启动memcached服务时出现错误提示:“error while loading ...

    memcached 64位 window

    这个版本可能是1.4.5,这是一个较早的版本,可能需要检查是否有更新的版本以获取更好的安全性和性能优化。解压后,用户通常需要按照安装指南进行编译和安装,设置配置文件,并通过命令行工具启动和管理Memcached服务...

    memcached安装软件 libevent magent memcached

    1. 启动命令:`memcached -d -p 11211 -u root -m 64`,这里 `-p` 指定端口号,`-u` 指定运行用户,`-m` 设置内存大小。 2. 要检查服务是否运行,可以使用`ps aux | grep memcached`。 为了更方便地控制memcached,...

    python-memcached python-memcached

    1. **键值存储**:Python-memcached允许开发者使用键(key)和值(value)对来存储数据。键是唯一的标识符,而值可以是任何Python序列化支持的数据类型。 2. **多服务器支持**:你可以配置Python-memcached连接到多...

    memcached windows稳定版

    1. 下载memcache的windows稳定版,解压放某个盘下面,比如在c:\memcached 2. 在终端(也即cmd命令界面)下输入 ‘c:\memcached\memcached.exe -d install’ 安装 3. 再输入: ‘c:\memcached\memcached.exe -d ...

    Memcached安装和配置

    1. 使用`memcached -d shutdown`关闭服务。 2. 打开注册表编辑器,导航到`HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached Server`。 3. 修改ImagePath键值,添加`-l 127.0.0.1 -m 3000 -c 2048`,...

    memcached服务器端memcached.exe 下载

    1. **分布式**:memcached可以自动将数据分发到不同的服务器,平衡负载。 2. **内存存储**:所有的数据都存储在内存中,提供高速访问。 3. **键值对**:数据以键值对的形式存储,易于管理和检索。 4. **缓存策略**:...

    Memcached 原理和使用详解

    1. **如何解决数据一致性问题**:由于Memcached的无状态性和内存存储特性,它并不保证强一致性。通常,应用层需要处理可能出现的数据不一致情况。 2. **如何处理内存不足**:当内存满时,Memcached会使用LRU策略删除...

    memcached实现集群的session共享问题

    memcached实现集群的session共享问题,处理集群服务器情况下,memcached的session共享解决方案

    Memcached 统计与监控

    这不仅可以帮助我们了解Memcached的运行状态,还可以及时发现并解决性能问题,确保系统的稳定性和高效性。例如,通过监控Memcached的各项指标,可以了解其内存使用情况、命中率、请求处理速度等关键性能指标,从而...

    linux下安装memcached以及解决安装中遇到的问题

    Memcached 是一种高性能的分布式内存对象缓存系统,用于通过缓存数据库查询结果减少数据库负载,加速动态 Web 应用的访问速度,提高可扩展性。在 Linux 系统下部署 Memcached 是一个常见的需求,然而在安装过程中...

    windows下memcached+memcached.dll 5.3.8

    1. **下载Memcached**: 首先,你需要访问Memcached的官方网站或者第三方下载站点,找到适用于Windows的最新或指定版本的二进制文件,例如`memcached-5.3.8.zip`。 2. **解压与安装**: 下载完成后,解压文件到一个...

    memcached-1.4.0-rc1.tar.gz

    通过memcached的统计信息,可以监控内存使用情况、命令执行频率等,及时发现并解决问题。当遇到内存泄漏或性能瓶颈时,可以检查源代码或使用调试工具进行定位。 总之,memcached 1.4.0 rc1是一个强大的缓存系统,...

    memcached-1.5.11.tar.gz

    1. 负载均衡:在多台服务器上部署Memcached,通过一致性哈希或轮询等策略分配数据,避免热点问题。 2. 配置调整:合理设置内存大小、最大连接数、超时时间等参数,以适应不同业务需求。 3. 监控与日志:定期检查内存...

Global site tag (gtag.js) - Google Analytics