最后更新时间 2009-04-10 更新人 dormando@rydia.net
这里收集了经常被问到的关于memcached的问题
性能方面的问题
Memcached没有我的数据库快,为什么?
在一对一比较中,memcached可能没有您的SQL查询快。但是,这不是memcached的设计目标。Memcached的目标是可伸缩性。当连接和请求增加的时候,memcached的性能将比大多数数据库好。您可以先在高负载的环境(并发的连接和请求)中测试您的代码,然后再决定memcached是否适合您。
客户端库
memcached有哪些客户端库?
看看上面的"如何访问memcached"小节。
使用不同的客户端库,可以访问到memcached中相同的数据吗?
从技术上说,是可以的。但是您可能会遇到下面三个问题:
- 不同的库采用不同的方式序列化数据。举个例子,perl的Cache::Memcached使用Storable来序列化结构复杂的数据(比如hash references, objects, 等)。其他语言的客户端库很可能不能读取这种格式的数据。如果您要存储复杂的数据并且想被多种客户端库读取,那么您应该以简单的string格式来存储,并且这种格式可以被JSON、XML等外部库解析。
- 同样,从某个客户端来的数据被压缩了,从另一个客户端来的却没被压缩。
- 各个客户端库可能使用不同的哈希算法(阶段一哈希)。在连接到多个memcached服务器端的情况下,客户端库根据自身实现的哈希算法把key映射到某台memcached上。正是因为不同的客户端库使用不同的哈希算法,所以被Perl客户端库映射到memcached A的key,可能又会被Python客户端库映射到memcached B,等等。Perl客户端库还允许为每台memcached指定不同的权重(weight),这也是导致这个问题的一个因素。
什么是一致性哈希的客户端?
一致性哈希算法是a new approach to managing the first-layer hashing system for memcached clients。这里有一篇文章很好地解释了它的用处:http://www.last.fm/user/RJ/journal/2007/04/10/392555 。
客户端FAQ
目前有一些记录:
客户端可以通过"前缀"来给key设置一个域(命名空间)。例如,在一个共享主机的环境中,您可以将客户姓名作为"前缀",为key创建一个特定的域。在存储数据的时候,"前缀"可以用在key上,但是不应该参与哈希计算。目前,memcached自己还没有实现针对复杂结构数据的序列化方法,JSON则是一种被广泛使用的对象序列化格式。
分享到:
相关推荐
在Java开发中,有三种主流的Memcached客户端库供开发者选择:官方的基于传统阻塞IO的客户端、Dustin Sallings实现的基于Java NIO的Spymemcached以及XMemcached。 1. **官方客户端** 官方提供的客户端是由Greg ...
- "memcached客户端.rar": 这个文件可能包含不同编程语言的客户端库源代码或者预编译的二进制文件,供开发者在他们的应用程序中连接和操作memcached服务。 - "memcached服务端.rar": 提供了memcached服务端的软件包...
3.xmemcached,XMemcached也使用得比较广泛,而且有较详细的中文API文档,具有如下特点:高性 能、支持完整的协议、支持客户端分布、允许设置节点权重、动态增删节点、支持JMX、与Spring框架和Hibernate-memcached的...
memcached 安装文件,libevent库, C/C++ memcached 客户端库:libmemcached 全套工具:libevent-1.3.tar.gz,memcached-1.2.2.tar.gz,libmemcached-0.42.tar.gz 测试通过的
配合客户端库(如dll文件),可以方便地在各种编程语言中与Memcached服务端进行交互,实现高效的数据缓存,提升应用性能。正确配置和使用Memcached,对于优化系统性能和处理高并发请求具有重要意义。
Memcached 是一个高性能的分布式内存对象缓存系统,它被设计用来缓解数据库负载,通过将数据存储在...对于C#开发者来说,了解如何利用BeITMemcached或其他C#客户端库来集成和操作Memcached是提升应用性能的关键技能。
标题"memcached C++ 客户端 源码"表明了这是一个关于使用C++编写的memcached客户端的源代码库。memcached是一款高性能、分布式的内存对象缓存系统,常用于减轻数据库负载,提高Web应用性能。C++客户端则为开发者提供...
**Memcached 完整项目详解** Memcached 是一个高性能、分布式的内存对象缓存系统,用于在应用服务器之间共享...通过理解服务端的部署和客户端的使用方法,开发者能够更好地利用 Memcached 实现分布式系统的性能优化。
这个压缩包包含了在Windows 64位环境下运行的memcached服务端以及用于Java应用程序的客户端库。 **memcached服务端(win64)** 1. **安装与配置**:在Windows 64位操作系统上,memcached服务端的安装通常涉及下载...
客户端是应用与Memcached交互的接口,常见的客户端库有libmemcached(C语言)、pylibmc(Python)和memcached-client(Java)等。客户端的主要任务包括: - **连接管理**:建立与服务端的TCP连接或Unix域套接字连接...
2. **C#**:这是编写这个客户端库的编程语言,具有面向对象、类型安全和跨平台的特性,适合构建高性能的应用程序。 3. **.net**:这是微软的开发框架,提供了丰富的类库和工具,使得开发包括web应用在内的各种类型的...
3. **序列化与反序列化**:因为Memcached只处理字节串,客户端库需要处理数据的序列化和反序列化,如JSON、protobuf等格式。 4. **错误处理**:客户端应有良好的错误处理机制,对网络异常、超时、操作失败等情况...
Java Memcached客户端是Java开发者用来与Memcached分布式内存缓存系统...了解这些知识点后,Java开发者可以有效地利用Memcached客户端库来提升应用的性能,通过缓存减少数据库访问,从而提高系统的响应速度和用户体验。
这些客户端库通常实现了基本的Memcached操作,如添加、获取、删除、替换和触摸缓存项。 1. **添加(Add)**: 这个操作将一个新的键值对存储到Memcached中,如果该键已经存在,则操作失败。 2. **获取(Get)**: ...
MemcachedProviders客户端库通常包含多种语言的实现,例如Java、.NET、Python等,为不同平台和开发环境的应用程序提供服务。在.NET环境中,MemcachedProviders通常提供了易于使用的API,使得开发人员可以轻松地进行...
**Memcached 客户端与服务端程序及JAR包详解** Memcached 是一个高性能、分布式内存对象缓存系统,广泛应用于...正确地选择和使用客户端库,以及合理地管理 JAR 包,能够确保你的应用程序充分利用 Memcached 的优势。
Memcached是一种高性能、分布式内存对象缓存系统,用于在分布式环境中快速存储和检索数据。它通过将数据存储在内存中,避免了频繁的数据库访问,从而显著提高了应用程序的性能。在Java开发中,为了与Memcached服务器...
memcached,redis性能测试,内存缓存系统的性能测试;