一个全面、快速、纯Python的memcached客户端
项目描述
PyMemcache
一个全面、快速、纯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”,没有序列化或反序列化支持,并且无法将错误视为缓存缺失。
外部链接
- memcached 文本协议参考页面
https://github.com/memcached/memcached/blob/master/doc/protocol.txt
- python-memcached 库(另一个纯 Python 库)
- Mixpanel 关于其 Python memcached 客户端的博客文章
- Mixpanel 的纯 Python memcached 客户端
- 再见 python-memcached,你好 pymemcache(迁移指南)
https://jugmac00.github.io/blog/bye-bye-python-memcached-hello-pymemcache/
鸣谢
我们在招聘!
你真的对开源软件感到兴奋吗?或者对优秀的软件工程感到兴奋?Pinterest 正在招聘!
变更日志
4.0.0 版本中的新功能
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版本开始
PooledClient和HashClient现在支持自定义Client类
新功能自3.1.1版本开始
改进MockMemcacheClient以使其更像Client
新功能自3.1.0版本开始
为TCP套接字添加TLS支持。
修复了已死亡的服务器恢复活动时的边缘情况。
新功能自3.0.1版本开始
使MockMemcacheClient与真实客户端更加一致。
当启用use_pooling时,从HashClient传递encoding到其连接池客户端。
新功能自3.0.0版本开始
序列化API已重做。现在,客户端对象期望一个名为serde的参数是一个实现serialize和deserialize方法的对象。(serialize和deserialize仍然支持,但被视为已弃用。)
验证expire、delay、incr、decr和memlimit的整数输入 - 非整数值现在引发MemcacheIllegalInputError
验证cas的输入 - 不是整数或0-9字符串的值现在引发MemcacheIllegalInputError
为MockMemcacheClient添加了prepend和append支持。
为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版本开始
版本 2.0.0 的新功能
版本 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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 27bf9bd1bbc1e20f83633208620d56de50f14185055e49504f4f5e94e94aff94 |
|
MD5 | 1feca786d1a0d52d351caea298aec2cb |
|
BLAKE2b-256 | d9b64541b664aeaad025dfb8e851dcddf8e25ab22607e674dd2b562ea3e3586f |
pymemcache-4.0.0-py2.py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f507bc20e0dc8d562f8df9d872107a278df049fa496805c1431b926f3ddd0eab |
|
MD5 | 546f0626878e6173eec27b22bb51ccf5 |
|
BLAKE2b-256 | 41ba2f7b22d8135b51c4fefb041461f8431e1908778e6539ff5af6eeaaee367a |