用于示意图的redis存储后端。

redis-schematics的Python项目详细描述


为具有可裁剪抽象级别的示意图模型提供redis持久性。

travis

安装

使用pip:

pip install redis_schematics

了解持久层

有几种方法可以在键值集上实现复杂对象的排序 数据库,如redis。最好的方法取决于应用程序约束。 我们认为为您的应用程序提供一个良好的存储模型是 选择要使用的抽象。下面你可以找到 提供抽象层。

^ {EM1}$目前只支持SimuleDeMixin和SimuleDeSimple,但您可以 使用BaseDeMixin构建你自己的持久层。

^ {STR 1 } SuffeleDeMixin >/P>

使用简单的方法向对象添加redis持久性。每个对象 correnspond到redis上以对象名称空间为前缀的单个键, 将其关联到序列化对象。使用这个混音你只需要 声明主键,如下例所示。

当你在主键和集合上频繁匹配时,可以使用这个MIXIN。 操作、唯一过期、硬内存限制或只需要1-1对象密钥 接近。如果您需要在{TT1} $,^ {TT2}$上执行,您可能不使用此MIXIN。 以及非主键操作的get

^ {STR 1 } $ HASHReDISMIXIN < /强>

使用单一哈希方法向对象添加redis持久性。每种类型 correnspond到redis上的单个键,其中包含每个实例的散列集 作为集合中包含序列化对象的项。

<> p>当你在主键、集合和集合上频繁匹配时,可以使用这个混音 所有操作,硬内存限制或想要一个单一的关键方法。 如果需要在{TT1} $和^ {TT3}$上执行,则不可以使用此MIXIN。 非主键操作。

快速启动

^ {str 1}$创建具有持久性的模型

注意:您应该包含一个pk,但不要费心手动设置它的值。 我们可以从id字段或通过使用 __unique_together__

fromdatetimeimportdatetime,timedeltafromredisimportStrictRedisfromredis_schematicsimportSimpleRedisMixinfromschematicsimportmodels,typesclassIceCreamModel(models.Model,SimpleRedisMixin):pk=types.StringType()# Just include a pkid=types.StringType()flavour=types.StringType()amount_kg=types.IntType()best_before=types.DateTimeType()

在redis上设置

保存很简单,只要set()

vanilla=IceCreamModel(dict(id='vanilla',flavour='Sweet Vanilla',amount_kg=42,best_before=datetime.now()+timedelta(days=2),))chocolate=IceCreamModel(dict(id='chocolate',flavour='Delicious Chocolate',amount_kg=12,best_before=datetime.now()+timedelta(days=3),))vanilla.set()chocolate.set()

从redis获取

从redis获取元素有两种基本方法:按pk或按值。 您可以使用类方法match_for_pk(pk)match_for_values(**Kwargs) 或者只是match(**kwargs)让我们选择哪一个。请注意 两种方法的性能差别很大,因此您可能会避免匹配 对于高性能环境的价值。您也可以使用刷新重新加载 存储中的对象(如果已修改)。

IceCreamModel.match_for_pk('vanilla')IceCreamModel.match_for_values(amount__gte=30)IceCreamModel.match(id='vanilla')# match on pkIceCreamModel.match(best_before__gte=datetime.now())# match on valuesvanilla.refresh()

全部提取和筛选

您还可以使用all()对所有和筛选器进行反序列化。请注意 这将对所有存储对象进行反序列化。

IceCreamModel.all()IceCreamModel.filter(amount__gte=30)

正在删除并过期

要删除对象,可以设置__expire__或使用delete()方法。 请注意,expires在单键和多键方法上的工作方式不同。

classMyVolatileModel(models.Model,SimpleRedisMixin):__expire__=3600# model expire (in seconds)pk=types.StringType()vanilla.delete()

json

如果您想要json序列化,至少有两个选项:

  1. 修补默认序列化程序。
  2. 编写自定义jsonencoder。

我们已经实现了一个方便的补丁功能,你需要添加这个 代码位于所有要自动添加的内容的顶部 json序列化功能:

fromredis_schematics.patchesimportpatch_jsonpatch_json()

注意

最终__json__将添加到stdlib,请参见 https://bugs.python.org/issue27362

路线图

我们仍然是0.x,但是我们非常接近一个稳定的api。检查our roadmap是否有遗漏。

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

推荐PyPI第三方库


热门话题
静态函数中局部变量的java垃圾收集   java向ImageView添加投掷手势   java spring引导未根据配置文件读取正确的属性   主屏幕小部件中的java自定义布局   java JSP:具有相对路径的FileReader引发FileNotFoundException   java Hibernate在集合上循环时删除会话   java无法建立到jdbc:oracle:thin:@localhost:1521:XE的连接   java我可以使用Hibernate对特定的整数大小进行验证吗?   批处理文件如何注意Java中不同语言环境中的文件名   用于IntelliJ中声纳、PMD、Findbugs和Checkstyle的Java 8   在PIG程序中找不到java类分布式文件系统   Java游戏引擎中动态ZOrdering的绘制   java处理线程工作者的多个错误   带有MariaDB驱动程序的java MySQL服务器产生日期排序错误   java终止线程的正确方法   java Android在手机睡眠时发送udp   java如何将文档添加到事务内部的Firebase集合?