一个高性能异步Python客户端Memcached,包括全电池

emcache的Python项目详细描述


一个高性能异步Python客户机,用于Memcached,包括全电池

https://readthedocs.org/projects/emcache/badge/?version=latesthttps://github.com/pfreixes/emcache/workflows/CI/badge.svghttps://github.com/pfreixes/emcache/workflows/PyPi%20release/badge.svg

Emcache站在巨人的肩膀上,实现了Memcached客户机所需的大部分特性 借鉴其他Memcached客户端的经验,提供以下主要特点:

  • 支持许多Memcached主机,通过使用Rendezvous hashing算法将流量分布在它们周围。在
  • 支持不同的命令和不同的标志行为,如noreplyexptimeflags。在
  • 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操作。在

ClientConcurrencySets opS/secSets latency AVGGets opS/secGets latency AVG
aiomcache32338720.00094341830.00093
pymemcache32327920.00097329610.00096
emcache32494100.00064492120.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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java需要一种简单的方法来创建用于排序的comparator类   java getReadableDatabase和getWriteableDatabase无法解析   查找列表<Long>中与某个元素对应的所有索引的java方法   安卓将视图添加到ViewFlipper会导致java。StackOverflowerr语言   java根据它所包含的长“curTime”类字段将N的列表拆分为24(小时)   Android N中的Java8流API   自动生成Java策略文件的安全性   垃圾收集鼓励Java中的主要GC(但不是STW GC)   java如何检查UDP服务器上侦听的客户端数量   在前一台主机被Datastax Java驱动程序关闭后,Cassandra尝试重新连接到下一台主机   java如何使用Spring Boot创建部分代理   java是否有一个网站或资源可以完全比较EJB版本   java无需使用第三方库从gradle生成输出   继承由于这个多态性的基本示例中的语法有什么不同吗?(爪哇)   java字符串数组中的空字符串   java为什么CMS中的初始标记阶段是串行的   为什么Lucene有时与InChIKeys不匹配?   安卓通知Java应用程序数据库中的更改   java如何将单个json对象值解析为按钮   java打印堆栈将运行时错误跟踪到文件