京都大亨键值存储的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第三方库


热门话题
使用applets查询的多人java游戏?   java如何基于字符串生成数组   基于java多边形的路径查找   java如何对多列ArrayList排序   java批处理更新从更新中返回了意外的行数(Spring/Hibernate)   java如何使用SeleniumWebDriver列出<tr>标记内的所有<td>   java如何使用SimpleFlatMapper将前缀为CSV的列别名到映射?   java为什么通过eclipse运行/调试TomCat时会出现ClassNotFoundException   java Android滚动视图上次视图未显示内部线性布局   替换字符串中不带空格的字符序列   调用方法时Java Swing GUI冻结   java是否允许/建议重用收集器?   在同步方法中使用java hashmap迭代器时   在java XMLDecoder XMLEncoder中写入XMLdatabase   java I无法在活动的片段中填充recyclerview   java Jitsi在调用过程中播放WAV文件如果可能,与音频混合   java JPA为什么我看到DB中每行有两个实体实例?