跳转到主要内容

为schematics提供的Redis存储后端。

项目描述

为Schematics模型提供可定制抽象级别的Redis持久化。

travis

安装

使用pip

pip install redis_schematics

理解持久化层

在Redis等键值集数据库上实现复杂对象的持久化有几种方法。最佳方法取决于您的应用程序限制。我们认为为您的应用程序提供良好的存储模型是允许您选择您想要使用的抽象。以下您可以找到不同提供的抽象层的比较。

目前我们只支持SimpleRedisMixin和SimpleRedisModel,但您可以使用BaseRedisMixin来构建自己的持久化层。

SimpleRedisMixin

使用简单方法将Redis持久化添加到对象中。每个对象对应于Redis中的一个键,键以对象命名空间为前缀,对应于序列化对象。要使用此混合,您只需声明一个主键,如下例所示。

当您有频繁的主键和集合操作匹配、唯一过期、硬内存约束或只想使用1-1对象-键方法时,您可以使用此混合。如果您需要非主键操作上的的性能,则不应使用此混合。

HashRedisMixin

使用单个哈希方法将 Redis 持久性添加到对象中。每种类型对应 Redis 中的一个单个键,该键包含一个哈希集,其中每个实例作为集合中的一个条目,包含序列化的对象。

当您经常在主键、集合和所有操作上进行匹配,或者有严格的内存限制,或者希望使用单个键方法时,可以使用此 Mixin。如果您需要在非主键操作上进行 filterget 操作时,则不能使用此 Mixin。

快速入门

创建具有持久性的模型

注意:您应该包含一个 pk,但不必手动设置其值。我们可以从 id 字段推断它,或者通过使用 __unique_together__ 设置字段名称的元组。

from datetime import datetime, timedelta

from redis import StrictRedis
from redis_schematics import SimpleRedisMixin
from schematics import models, types


class IceCreamModel(models.Model, SimpleRedisMixin):
    pk = types.StringType()  # Just include a pk
    id = 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) 来让我们选择其中一种。请注意,两种方法的表现力有很大差异,因此在高性能环境中您可能需要避免对值进行匹配。您还可以使用 refresh 来重新加载已修改的对象。

IceCreamModel.match_for_pk('vanilla')
IceCreamModel.match_for_values(amount__gte=30)

IceCreamModel.match(id='vanilla')  # match on pk
IceCreamModel.match(best_before__gte=datetime.now())  # match on values

vanilla.refresh()

获取全部并过滤

您还可以使用 all() 来反序列化所有内容并过滤。请注意,这涉及反序列化所有存储的对象。

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

删除和过期

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

class MyVolatileModel(models.Model, SimpleRedisMixin):
    __expire__ = 3600  # model expire (in seconds)
    pk = types.StringType()

vanilla.delete()

JSON

如果您想进行 JSON 序列化,您至少有两个选项

  1. 修改默认序列化程序。

  2. 编写自定义 JSONEncoder。

我们实现了一个方便的补丁函数,您需要将此代码添加到所有内容的顶部,以自动添加 JSON 序列化功能

from redis_schematics.patches import patch_json
patch_json()

路线图

我们仍然是 0.x,但我们非常接近一个稳定的 API。查看 我们的路线图,了解缺少的内容。

项目详情


下载文件

为您的平台下载文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

redis_schematics-0.3.1.tar.gz (9.2 kB 查看散列)

上传时间

构建分布

redis_schematics-0.3.1-py3-none-any.whl (9.1 kB 查看散列)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页