用于示意图的redis存储后端。
redis-schematics的Python项目详细描述
为具有可裁剪抽象级别的示意图模型提供redis持久性。
安装
使用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序列化,至少有两个选项:
- 修补默认序列化程序。
- 编写自定义jsonencoder。
我们已经实现了一个方便的补丁功能,你需要添加这个 代码位于所有要自动添加的内容的顶部 json序列化功能:
fromredis_schematics.patchesimportpatch_jsonpatch_json()
注意
最终__json__将添加到stdlib,请参见 https://bugs.python.org/issue27362
路线图
我们仍然是0.x,但是我们非常接近一个稳定的api。检查our roadmap是否有遗漏。