京都大亨键值存储的python客户端

python-kyototycoon-ng的Python项目详细描述


关于

这是京都大亨服务器的全功能python客户端库, 同时支持Python2和3。它包括对 原版图书馆由前坂东郎和斯蒂芬·哈默,还介绍 api行为上的一些差异。

自从京都大亨由其最初的作者发展以来 在2012年左右暂停,我们也在维护一个更新的和准备好的分叉 其中:

https://github.com/carlosefr/kyoto

有关京都大亨服务器的更多信息,请参阅:

http://carlosefr.github.io/kyoto/kyototycoon/doc/

功能

更有效的二进制协议也与 http协议。它提高了up的性能 到6倍,但只有以下操作可用:

  • ^{tt1}$ and ^{tt2}$
  • ^{tt3}$ and ^{tt4}$
  • ^{tt5}$ and ^{tt6}$
  • ^{tt7}$

二进制协议不支持原子操作, 使用时必须使用“atomic=false”。操作 除此之外,还会引发NotImplementedError异常。

有可能有两个Kyototycoon对象打开到同一个 同一应用程序中的服务器,一个使用http,另一个使用http 如果需要,使用二进制协议。

图书馆进行自动打包和拆包(编组) 从/到数据库的值。以下数据 默认情况下,存储格式可用:

  • ^{tt9}$ - Python “pickle” format.
  • ^{tt10}$ - JSON format (compact representation).
  • ^{tt11}$ - Strings (UTF-8).
  • ^{tt12}$ - Binary data.

您还可以使用KT_PACKER_CUSTOM格式 可以指定自己的对象来执行封送处理。这个对象 需要提供以下两种方法:

  • ^{tt14}$ - convert “data” to ^{tt15}$
  • ^{tt16}$ - convert “data” from ^{tt15}$

对除play_script()之外的所有方法执行封送处理, 因为服务器可以在 一次。调用方很可能知道 被调用的脚本返回并必须自己进行封送处理。

复制从机

自0.7.0版以来,此库还包含一个复制从机 上课。这个类提供一个consume()生成器函数 接收并解析来自京都大亨的事务日志条目 主服务器进入字典。

这可以用来构建您自己的自定义复制方案, 喜欢密钥过滤,或者对服务器“set”、“remove”或“clear”做出反应 数据库操作。

请注意,只有显式操作才会创建事务日志事件。 诸如过期时删除密钥之类的隐式操作不起作用。

与客户机库不同,复制从机始终处理 “key”和“value”属性是不透明的二进制数据。

启用memcache的服务器

京都大亨支持memcached协议的一个子集。当 服务器已启用此功能,包括项标志,这些标志存储为 值的最后4个字节。从这个库的0.7.3版开始, 其中包括一个自定义打包程序,可以透明地处理这个 还包括针对以下情况的gzip压缩/解压缩: 例如,一个python应用程序正在向kyoto编写html页面 服务器和http服务器正在使用memcached客户端从中读取数据 图书馆。

示例:

from kyototycoon import KyotoTycoon, KT_PACKER_CUSTOM
from kyototycoon.packers import MemcachePacker

mp = MemcachePacker(gzip_enabled=True, gzip_flag=1)
kt = KyotoTycoon(pack_type=KT_PACKER_CUSTOM, custom_packer=mp)

kt.open("127.0.0.1", 1978)

kt.set("key", "value")
value = kt.get("key")

kt.close()

要在不进行任何额外处理的情况下处理(value, flags)对, 可以使用SimpleMemcachePacker

from kyototycoon import KyotoTycoon, KT_PACKER_CUSTOM
from kyototycoon.packers import SimpleMemcachePacker

smp = SimpleMemcachePacker()
kt = KyotoTycoon(pack_type=KT_PACKER_CUSTOM, custom_packer=smp)

kt.open("127.0.0.1", 1978)

kt.set("key", ("value", 123))
value, flags = kt.get("key")

kt.close()

兼容性

此库仍不在版本1.0中,这意味着API和 行为不能保证在不同版本之间保持一致。

已删除对使用错误对象的支持。如果你需要 出于兼容性的原因,请使用 (包括)第5.5.9版。此版本之后的版本引发异常 所有京都大亨的错误。

安装

您可以从源安装此库的最新版本:

python setup.py build
python setup.py install

或者,您可以安装pypi的最新稳定版本:

pip install python-kyototycoon-ng

作者

基于ulrich mierendorff的代码添加了二进制协议支持。 您可以在以下网址找到原始库:

http://www.ulrichmierendorff.com/software/kyoto_tycoon/python_library.html

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

推荐PyPI第三方库


热门话题
java如何将Hibernate与DtoMapping和@Audited一起使用   Spring批处理中的java执行批处理文件   oop为什么我们不能在函数接口中重载抽象方法?(爪哇)   多线程Java同步不正确的发布   每次我进行更改时,jsp都会重建整个Java应用程序   java有没有办法从数组中删除奇数索引?   java HttpURLConnection抛出OutOfMemoryError   java创建文件并将其存储到外部存储器   java setContentView在发布apk时未与GoogleAppClient一起使用   java动态数据表显示空行   java使用PrintWriter将ASCII代码写入文件   确定鼠标是否在Java中的旋转矩形内滑动(AWT、swing)   Selenium中的java XPath定位器   Clojure java interop如何传递浮点数组>   java检查2D数组中的等效行?   Java中字符数组的选择排序   java SAP Hybris无法创建自定义横幅组件   java从Spring MVC控制器中的安全上下文获取UserDetails对象   Tomcat或Java中是否存在BeforeCash()或beforeExit()之类的函数   使用Jackson ObjectMapper和springsession将最终类序列化到Redis中