一个高性能异步Python客户端Memcached,包括全电池
emcache的Python项目详细描述
一个高性能异步Python客户机,用于Memcached,包括全电池
Emcache站在巨人的肩膀上,实现了Memcached客户机所需的大部分特性 借鉴其他Memcached客户端的经验,提供以下主要特点:
- 支持许多Memcached主机,通过使用Rendezvous hashing算法将流量分布在它们周围。在
- 支持不同的命令和不同的标志行为,如noreply、exptime或flags。在
- adaptiveconnection pool,根据流量增加每个Memcache主机的连接数。在
- Node healthiness可跟踪性和一个可选标志,用于禁用参与命令的不健康状态。在
- operations and connections的度量,将它们发送到您最喜欢的TS数据库,以了解Emcache驱动程序的运行情况。在
- 听最重要的cluster events,例如,了解节点何时被标记为不正常。在
- 速度,Emcache很快。参见基准部分。在
使用
用于安装
pip install emcache
下面的代码片段显示了创建新客户机、保存新密钥和稍后检索值所需的最少内容。在
^{pr2}$Emcache目前支持以下命令,其中包括许多命令:
- get用于检索特定密钥。在
- 获取Cas版本,该版本还返回特定密钥的case标记。在
- get_many多个密钥获取版本。在
- 获取多个密钥多个密钥+大小写令牌获取版本。在
- set设置新的键和值
- add添加一个新的键和值,当且仅当它不存在时。在
- replace如果只有在键存在时才更新键的值。在
- append为特定的键向当前值追加一个值,当且仅当该键确实存在时。在
- prepend在特定键的当前值前面加上一个值,当且仅当该键确实存在时。在
- cas当且仅当提供的令牌与Memcached服务器中存储的令牌匹配时,才更新密钥的值。在
查看文档以获取当前支持的所有operations的列表。在
某些命令支持以下行为标志:
- noreply对于存储命令,如set我们不等待Memcached服务器的显式响应。牺牲Memcached服务器的显式ack以提高速度。在
- flags对于存储,我们可以保存一个int16值,稍后可以通过fetch命令检索该值。在
- exptime对于存储命令,这提供了一种配置过期时间的方法,一旦达到该时间,Memcached服务器将自动收回密钥
有关用法的详细信息,read the docs。在
基准
下表显示了与其他两个Memcached Python客户机相比,Emcache的速度有多快, aiomcache和{a13}。 对于这个特定的基准测试,使用了两个节点,一个用于客户端,一个用于Memcached服务器,使用32个TCP连接 并在Pymemcache的用例中使用32个并发异步任务-线程。对于Emcache和Aiomcache uvloop被用作默认循环。在
在基准测试的第一部分,客户机尝试以mucha^{str1}$set的方式运行,第二步也是如此 已完成,但使用get操作。在
Client | Concurrency | Sets opS/sec | Sets latency AVG | Gets opS/sec | Gets latency AVG |
---|---|---|---|---|---|
aiomcache | 32 | 33872 | 0.00094 | 34183 | 0.00093 |
pymemcache | 32 | 32792 | 0.00097 | 32961 | 0.00096 |
emcache | 32 | 49410 | 0.00064 | 49212 | 0.00064 |
对于get和set操作,Emcache的性能比其他两个实现高出近50K个操作/秒。在
另一个基准测试用于比较在必须处理wi的情况下每个实现的行为一个以上的节点,一个新的 使用不同的集群大小执行基准测试,但是使用的方法与前面的测试相同,首先执行尽可能多的集合 操作它可以,以后尽可能多的人得到操作。对于此特定用途,不能使用AIOMMCHCE,因为它 不支持多个节点。在
^{tb2}$新节点的加入并没有对Emcache造成几乎降级的影响,在上一次测试中8个节点Emcache达到42K 每秒获得操作数和46K设置操作数/秒。另一方面,Pymemcached遭受了严重的降级,使Emcache达到~x5倍。 更快。在
发展
克隆存储库及其杂音3子模块
git clone --recursive git@github.com:pfreixes/emcache
编译杂音3
pushd vendor/murmur3 make static popd
安装带有开发依赖项的emcache
make install-dev
- 项目
标签: