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

python-memcached client 性能问题

 
阅读更多

线上发现memcached偶发超过100ms的情况,刚开始以为是memcached server连接数过多的问题,后台测试发现本地也存在这个问题,应该是memcached-client实现导致大并发下,性能太差:

ab -n1000 -c20 http://127.0.0.1:7299/category/life/


 

测试pylibmc性能很好,同样并发下面很少有耗时超过1毫秒的:


 

pylibmc的连接数也很稳定:

 


 

# -*- coding: utf-8 -*-
import time
import pylibmc

mc = pylibmc.Client(["127.0.0.1"])
class Client():
    
    def __init__(self, servers):
        '''
            忽略掉memcached的server配置,使用cache_server
        '''
        
    def get(self,key):
        starttime = time.time()
        val =  mc.get(key)
        endtime = time.time()
        exe_time = (endtime - starttime)*1000
        if exe_time>100:
            print "memcache3 get %s cost:%s"%(key,exe_time)
        return val
    
    def set(self, key, val, time=0, min_compress_len=100):
        return mc.set(key,val,time)
    
    def delete(self,key, time=0):
        return mc.delete(key)
    
    def incr(self, key, delta=1):
        return mc.incr(key,delta)
    
 

 

 

 

 

由于dboss-client是模仿python memcached  client实现的,也很慢,通过打点发现,瓶颈在:

def readline(self):
        buf = self.buffer
        recv = self.socket.recv
        while True:
            index = buf.find('\r\n')
            if index >= 0:
                break
            data = recv(4096)
            if not data:
                self.mark_dead('Connection closed while reading from %s'
                        % repr(self))
                self.buffer = ''
                return ''
            buf += data
        self.buffer = buf[index+2:]
        return buf[:index]

 

dboss测试对比了性能,和原来的差别不大:

AB:

memcached:
Percentage of the requests served within a certain time (ms)
  50%    785
  66%    931
  75%   1041
  80%   1102
  90%   1266
  95%   1428
  98%   1595
  99%   1682
 100%   1811 (longest request)


dboss:
Percentage of the requests served within a certain time (ms)
  50%    799
  66%    918
  75%    992
  80%   1038
  90%   1228
  95%   1382
  98%   1689
  99%   1998
 100%   2432 (longest request)

 

统计get的执行时间(20个并发)

 

dboss :

total: 75243

 0.014%  10ms  -  563ms(count:1100)

99.986%  <10ms

 

memcached :

total: 77508

0.014%  10ms  -  660ms(count:1100)

99.986%  <10ms

 

redis :

total: 2400

10%  4.2ms~127ms

90%  <4.2ms

 

最后看看恐怖的pylibmc:


 

  • 大小: 195.1 KB
  • 大小: 220.3 KB
  • 大小: 153.5 KB
  • 大小: 110.3 KB
分享到:
评论

相关推荐

    python-memcached python-memcached

    10. **性能优化**:Python-memcached库设计得非常轻量级,它使用最少的网络通信开销,以提高与Memcached服务器之间的通信效率。 Python-memcached库的使用方法相对简单,通常需要导入库,创建客户端,然后通过...

    python-memcached-latest.tar

    Python-Memcached是一个Python接口,用于与Memcached内存缓存系统进行交互。Memcached是一种高性能、分布式内存对象缓存系统,用于减少数据库负载,通过在内存中存储数据来加速网络应用。这个`python-memcached-...

    python-memcached

    7. **预加载机制**:Python-Memcached库还包含了预加载功能,可以在程序启动时预先加载一部分常用数据到缓存中,提升应用性能。 8. **持久化**:虽然Memcached不支持数据持久化,但可以通过配合其他工具(如Redis或...

    Python库 | tencentcloud-sdk-python-memcached-3.0.335.tar.gz

    memcachedClient = memcached_client.MemcachedClient(secret_id, secret_key, region, clientProfile) # 示例:创建实例 req = models.CreateInstanceRequest.CreateInstanceRequest() # 设置请求参数 # ... resp ...

    PyPI 官网下载 | tencentcloud-sdk-python-memcached-3.0.315.tar.gz

    client = memcached_client.MemcachedClient(cred, "ap-guangzhou") # 示例:设置键值 request = models.SetItemRequest() request.InstanceId = "your-instance-id" request.Key = "key" request.Value = "value" ...

    python3-memcached-master

    10. 性能优化:Python3-memcached-master利用多线程,允许并行执行多个操作,以提高性能。此外,它使用了有效的序列化和反序列化策略,如使用pickle模块,来转换Python对象。 总之,Python3-memcached-master是...

    openstack安装包(二)

    python-ceilometerclient-1.0.8-1.el6.noarch.rpm python-chardet-2.0.1-1.el6.rf.noarch.rpm python-cheetah-2.4.1-1.el6.x86_64.rpm python-cinderclient-1.0.7-2.el6.noarch.rpm python-cliff-1.4.4-1.el6.noarch...

    Memcached-Java-Client-release_2.6.1.zip

    本文将围绕标题“Memcached-Java-Client-release_2.6.1.zip”展开,详细讲解如何在Java项目中整合并使用Memcached客户端库。 1. **Memcached简介** - Memcached是一种轻量级、基于内存的键值对存储系统,用于存储...

    Python-所有ApolloClient20cache实现的简单持久化

    本文将深入探讨标题中的"Python-所有ApolloClient20cache实现的简单持久化",以及与之相关的标签"Python开发-数据缓存"。 Apollo是一个配置中心,它允许应用程序动态地获取和更新配置,而无需重启服务。在Python中...

    reviewboard安装全套工具软件

    CollabNetSubversion-client-1.6.12-1.win32 httpd-2.2.19-win32-x86-openssl-0.9.8r memcached-1.2.6-win32-bin mod_python-3.3.1.win32-py2.5-Apache2.2 MySQL-python-1.2.2.win32-py2.5 patch-2.5.9-7-setup PIL-...

    openstack安装包(一)

    python-ceilometerclient-1.0.8-1.el6.noarch.rpm python-chardet-2.0.1-1.el6.rf.noarch.rpm python-cheetah-2.4.1-1.el6.x86_64.rpm python-cinderclient-1.0.7-2.el6.noarch.rpm python-cliff-1.4.4-1.el6.noarch...

    python-binary-memcached:一个纯Python模块(线程安全),可通过其二进制协议访问具有SASL身份验证的memcached

    一个纯python模块(线程安全),可以通过具有SASL auth支持的二进制文件访问memcached。 该模块的主要目的是能够与使用二进制协议的memcached通信并支持身份验证,因此它可以与Heroku一起使用。 有关在阅读文档的...

    memcached客户端

    5. **Node.js** - `node-memcached` 和 `memcached-client`:Node.js的 `node-memcached` 是一个稳定且广泛使用的客户端,而 `memcached-client` 提供了更现代的API和更好的错误处理。 6. **Go** - `go-memcache`:...

    ReviewBoard安装的所有文件包合总

    5 CollabNetSubversion-client-1.6.16-1.win32.exe 6 GetGnuWin32-0.6.3.exe 7 mod_python-3.3.1.win32-py2.5-Apache2.2.exe 8 MySQL-python-1.2.2.win32-py2.5.exe 9 patch-2.5.9-7-setup.exe 10 PIL-1.1.7.win32-...

    memcached-1.5.4

    - `1.5.4`版本是一个稳定版,修复了前一版本中的已知问题,提高了系统的稳定性和性能。 2. **源码结构** - `memcached-1.5.4`源码包含多个主要目录:`src`存放核心代码,`doc`包含文档,`test`有测试用例,`...

    memcached-1.5.12.tar.gz

    - 如果一切顺利,现在 memcached 已经在后台运行,可以使用 `telnet` 或 `memcached-client` 工具测试连接和存储数据。 4. **使用 memcached**: - 在应用程序中集成 memcached,需要选择合适的客户端库,如 PHP ...

    memcached连接demo

    MemcachedClient client = new MemcachedClient(AddrUtil.getAddresses("127.0.0.1:11211")); client.set("key", 0, "value"); String retrievedValue = (String) client.get("key"); ``` 3. **PHP**: PHP内...

    memcached资源demo(已调试通过)

    Memcached是一款高性能、分布式内存对象缓存系统,它广泛应用于Web应用中,用于减轻数据库的负载,提升数据访问速度。本资源“memcached资源demo(已调试通过)”是一个经过实际测试和验证的Memcached应用示例,下面将...

    Tomcat教程-python操作memcache.docx

    在命令行部分,我们看到了如何通过`yum -y install python-memcached`安装Python的Memcache客户端库,确保Python可以与Memcache服务器通信。然后运行`m.py`脚本,可以看到所有设置的键值对被正确地存储和检索。 ...

Global site tag (gtag.js) - Google Analytics