跳转到主要内容

一个全面、快速、纯Python的memcached客户端

项目描述

PyMemcache

https://img.shields.io/pypi/v/pymemcache.svg Master Documentation Status

一个全面、快速、纯Python的memcached客户端。

PyMemcache支持以下功能

  • 完全实现了memcached文本协议。

  • 使用UNIX套接字或IPv4或IPv6上的TCP进行连接。

  • 可配置套接字连接和发送/接收调用的超时时间。

  • 访问“noreply”标志,这可以显著提高写入速度。

  • 灵活、模块化和简单的序列化和反序列化方法。

  • (可选)将网络和memcached错误视为缓存未命中。

安装PyMemcache

从pip安装

pip install pymemcache

对于开发,从github克隆并运行测试

git clone https://github.com/pinterest/pymemcache.git
cd pymemcache

运行测试(确保您有一个本地memcached服务器正在运行)

tox

用法

请在此处查看文档:https://pymemcache.readthedocs.io/en/latest/

Django

从版本3.2开始,Django包含基于PyMemcache的缓存后端。请参阅 其文档

在较旧的Django版本中,您可以使用 django-pymemcache

与其他库的比较

pylibmc

pylibmc 库是围绕 libmemcached 实现的包装器,用 C 语言编写。它速度快,实现了一致性哈希、完整的 memcached 协议和超时功能。它不提供对“noreply”标志的访问。它也不是纯 Python 编写的,因此与 gevent 等库一起使用是不可能的,并且对 libmemcached 的依赖性提出了挑战(例如,它必须在运行时使用的 libmemcached 的同一版本上构建)。

python-memcached

python-memcached 库实现了整个 memcached 文本协议,对所有套接字调用具有单个超时,并具有灵活的序列化和反序列化方法。它完全用 Python 编写,因此与 gevent 等库兼容得很好。然而,它与线程局部绑定,不实现“noreply”,无法将错误视为缓存缺失,并且比 pylibmc 和 pymemcache 都慢。它还绑定到特定的方法来处理 memcached 服务器集群。

memcache_client

mixpanel 团队还创建了一个纯 Python 的 memcached 客户端。它对套接字超时提供了更细粒度的支持,仅连接到单个主机。然而,它不支持大多数 memcached API(仅支持 get、set、delete 和 stats),不支持“noreply”,没有序列化或反序列化支持,并且无法将错误视为缓存缺失。

鸣谢

我们在招聘!

你真的对开源软件感到兴奋吗?或者对优秀的软件工程感到兴奋?Pinterest 正在招聘!

变更日志

4.0.0 版本中的新功能

  • 删除了 Python 2 和 3.6 支持 #321 #363

  • 开始添加类型提示

  • 添加可插拔的压缩序列化/反序列化 #407

3.5.2 版本中的新功能

  • 处理空白的 STAT 值。

3.5.1 版本中的新功能

  • Client.get 在使用 ignore_exc 并且 memcached 不可用时返回默认值

  • HashClient.flush_all 添加了 noreply 支持。

3.5.0 版本中的新功能

  • MemcacheUnexpectedCloseError 发生时关闭套接字。

  • 在 Linux 平台上为客户套接字添加了 TCP 保持活动状态支持。

  • 通过包装客户端添加了重试机制。

3.4.4 版本中的新功能

  • pool_idle_timeout 之后从池中移除空闲连接。

3.4.3 版本中的新功能

  • 修复了使用 UNIX 套接字的 HashClient.{get,set}_many()

3.4.2 版本中的新功能

  • 删除了不带参数的命令(如 stats)后面的空格。这违反了 memcached 协议。

3.4.1 版本中的新功能

  • CAS操作现在在将None作为cas值时将引发MemcacheIllegalInputError

新功能自3.4.0版本开始

  • 为TCP套接字连接添加了IPv6支持。注意,如果可以为该域名解析IPv6地址,则可以使用IPv6而不是IPv4作为主机。

  • HashClient现在支持UNIX套接字。

新功能自3.3.0版本开始

  • 现在可以从顶级pymemcache包中导入HashClient(例如,pymemcache.HashClient)。

  • HashClient.get_many()现在不再为不可用的客户端中缺失的键存储False。相反,结果将不包含该键。

  • 添加了缺失的HashClient.close()HashClient.quit()

新功能自3.2.0版本开始

  • PooledClientHashClient现在支持自定义Client

新功能自3.1.1版本开始

  • 改进MockMemcacheClient以使其更像Client

新功能自3.1.0版本开始

  • 为TCP套接字添加TLS支持。

  • 修复了已死亡的服务器恢复活动时的边缘情况。

新功能自3.0.1版本开始

  • 使MockMemcacheClient与真实客户端更加一致。

  • 当启用use_pooling时,从HashClient传递encoding到其连接池客户端。

新功能自3.0.0版本开始

  • 序列化API已重做。现在,客户端对象期望一个名为serde的参数是一个实现serializedeserialize方法的对象。(serializedeserialize仍然支持,但被视为已弃用。)

  • 验证expiredelayincrdecrmemlimit的整数输入 - 非整数值现在引发MemcacheIllegalInputError

  • 验证cas的输入 - 不是整数或0-9字符串的值现在引发MemcacheIllegalInputError

  • MockMemcacheClient添加了prependappend支持。

  • HashClient添加了touch方法。

  • 添加了对Python 3.8的官方支持。

新功能自2.2.2版本开始

  • 修复了Python打包中的long_description字符串。

新功能自2.2.1版本开始

  • 修复了在同时设置多个不同类型的值时的flags

新功能自2.2.0版本开始

  • 删除了对Python 3.4的官方支持。

  • 使用setup.cfg元数据而不是setup.py配置来生成包。

  • HashClient添加了default_noreply参数。

  • encoding参数添加到Client构造函数中(默认为ascii)。

  • flags参数添加到写入操作方法中。

  • 正确处理MockMemcacheClient中的unicode键值。

  • 改进ASCII编码失败异常。

新功能自2.1.1版本开始

  • 修复了setup.py对已安装的six的依赖性。

新功能自2.1.0版本开始

  • 现在可以从顶级包导入公共类和异常(例如)。#197

  • 添加了对UNIX域套接字的支持,并记录了服务器连接选项。#206

  • 添加了对命令的支持。#211

  • 命令键现在总是按照原始顺序发送。#209

版本 2.0.0 的新功能

  • 修改了set_many和set_multi api的返回值。#179

  • 修复了对python-future的newbytes的支持。#187

  • 添加对Python 3.7的支持,并停止对Python 3.3的支持

  • 正确地批量调用Client.set_many()。#182

  • 提高_check_key()和_store_cmd()的性能。#183

  • 正确地批量调用Client.delete_many()。#184

  • 添加了通过serde显式设置pickle版本的选项。#190

版本 1.4.4 的新功能

  • pypy3 到 travis 测试矩阵

  • 测试中的完整基准测试

  • 修复 flake8 问题

  • mockmemcacheclient 支持非ASCII字符串

  • 从pickle格式0切换到最高可用版本。请参阅#156

    警告:不同版本的Python有不同的最高pickle版本:https://docs.pythonlang.cn/3/library/pickle.html

版本 1.4.3 的新功能

  • 文档改进

  • 修复了cachedump stats命令,请参阅#103

  • 尊重HashClient中的default_value

版本 1.4.2 的新功能

  • 停止对python 2.6的支持,请参阅#109

版本 1.4.1 的新功能

  • Python 3 序列化修复 #131

  • 停止对pypy3的支持

  • 注释清理

  • 将gets_many添加到hash_client

  • 更好地检查键中的非法字符

版本 1.4.0 的新功能

  • Unicode键支持。现在可以在创建客户端时传递标志,感谢jogo!

  • 修复了PooledClient没有遵循初始化时设置的default_noreply arg的问题,感谢kols!

  • 改进文档

版本 1.3.8 的新功能

  • 在可能的情况下使用cpickle而不是pickle(python2)

版本 1.3.7 的新功能

  • get(key, default=0)函数中的默认参数

  • 修复了使用sphinx自动生成文档的问题

  • 修复了与python3兼容的linters问题

  • 改进非法键输入的错误信息

  • 重构stat解析

  • 修复MockMemcacheClient

  • 修复键中间的Unicode字符错误

版本 1.3.6 的新功能

  • 修复flake8和清理tox构建

  • 通过清理键输入修复了安全漏洞

版本 1.3.5 的新功能

  • 修复了HashClient在重试设置为零时的错误。

  • 向客户端添加VERSION命令。

版本 1.3.4 的新功能

  • 修复了在无工作服务器时HashClient的行为错误的bug。

版本 1.3.3 的新功能

  • 向Travis构建添加缓存。

  • 修复了HashClient中可插拔哈希的bug。

  • 向Client构造函数添加default_noreply参数。

版本 1.3.2 的新功能

  • 使Memcache异常的位置向后兼容。

版本 1.3.0 的新功能

  • Python 3 支持

  • 引入了使用一致性哈希在多个 memcached 节点间分配键的 HashClient。它还可以检测服务器故障并重新平衡可用节点间的键。

  • 当 sock.recv() 抛出 EINTR 异常时重试

1.2.9 版本中新引入

  • 引入了 PooledClient,这是一个线程安全的客户端池

项目详情


下载文件

下载适用于您的平台文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源代码分发

pymemcache-4.0.0.tar.gz (70.2 kB 查看哈希值)

上传时间 源代码

构建分发

pymemcache-4.0.0-py2.py3-none-any.whl (60.8 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下组织支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面