字典式访问不同类型的模型。

modeldict的Python项目详细描述


————————————————————————————————————————————————————————————————字典值在字典实例中本地缓存,只有当数据存储中的值发生更改时,才将其值与其持久数据存储同步。

所有dicts类都位于"modeldict"包中。目前,modeldict提供了以下命令:

1。`` modeldict.redis.redisdict``由redis支持。
2.`` modeldict.models.modeldict```由数据库对象(最有可能是django模型)支持。
3.`` modeldict.zookeeperdict``由zookeeper支持。

每个dictionary类都有一个不同的`````init``方法,该方法接受不同的参数,因此请查阅它们的文档以了解特定的用法详细信息。

modeldict的实例一旦有了,就可以像使用普通字典一样使用它:

从redis导入redis dict
从redis导入redis

rieve another value
settings['buzz']='foogle'
settings['buzz']
>;'foogle'

t数据存储,因此任何"可pickle"对象都可以保存到这些存储中。

价值观。只有在持久性存储中存储的值实际发生更改时,才会使用持久性存储中的新值更新此缓存。

永久存储器中的e已更新。例如,``modeldict``构造函数需要一个作为参数传入的``cache``对象,该对象提供缓存线接口方法的实现,用于维护``last_updated``状态。memcache客户机是这个对象的一个很好的候选对象。

默认情况下,所有modeldict类都会在所有写操作(插入、更新和删除)以及在字典上的任何读取操作之前与其持久数据存储同步。此模式以牺牲读取速度为代价提供数据的高读取一致性。可以保证对dict的任何读取操作,即"settings["cool_feature"]``,都将始终使用最新的数据。如果永久数据存储的另一个使用者在您实例化对象后修改了该存储中的值,则您将立即能够使用dict实例读取新数据。

每次读取dict数据之前的持久存储会降低您的读取性能。如果您从字典中读取100个键,这意味着100次访问检查`` last_updated()``。即使数据存储的速度和memecache一样快,这一点也会增加得非常快。

因此,您最好不要与persiste同步。每次从dict中读取之前的nt存储,而是手动控制同步。为此,在构造dict时传递"autosync=false",即:从modeldict导入redisdict

n如下:

1.与普通字典一样,字典在实例化时从持久数据存储初始化。
2。每次操作发生时,写入(插入和更新)以及删除字典中的值仍将自动与数据存储同步。
3.任何时候从字典中读取时,*只使用内部缓存中当前的数据*。在读取之前,dict*不会尝试与其持久数据存储区*同步。
4。要强制dict尝试与其持久数据存储同步,可以调用字典上的"sync()"方法。与"autosync"为false时一样,如果"last\u update"表示没有更改,则dict将跳过从持久性存储中的更新。

手动同步的一个好的用例是一个可读性很强的web应用程序,您在其中使用modeldict进行设置配置。很少有请求真正地*更改*字典内容-大多数只是从字典中读取。在这种情况下,您可能只需要在用户的web请求开始时使用"sync()",以确保dict是最新的,但在请求过程中不会这样做,以便尽可能快地向用户推送响应。

adatabase对于django应用程序,应该使用"modeldict.models.modeldict"类。这个类有一个模型管理器的实例,以及"key-col"和"value-col"参数,这些参数可以用来告诉"modeldict"它应该使用对象上的哪些列来存储数据。

在每个请求之前手动调用"sync()"。通过"请求启动"信号:

django.core.signals.request启动。connect(settings.sync)

您只需要子类"modeldict.base.persisteddict",并实现以下必需的接口方法。

1.`` persist(key,value)```-在数据存储区的key``处persist``value`.
2.`` depersist(key)``-从数据存储中删除"key"处的值。
3。`` persistents()``-返回数据存储中所有键的"key=val"dict。
4。`` last_updated()``—上次更新数据存储中的数据时的可比较值。

您还可以实现两个可选字典方法,当在dict上调用实际的无下划线版本时,``modeldict.base.persisteddict``将调用这些方法。

1。`` pop(key[,default])``-如果字典中有"key",则删除它并返回其值,否则返回"default"。如果未给定"default",并且字典中没有"key",则会引发"keyerror"。
2.`` setdefault(key[,default])``-如果key在字典中,则返回其值。如果不是,则插入值为"default"的键并返回"default"。``默认值``默认值为``无`。

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

推荐PyPI第三方库


热门话题
java访问私有字段而不使用getter方法?   使用PowerMockito在JavaEWSAPI中模拟测试拉订阅   启动活动时未保存java首选项并清除变量   java如何在servlet中检索子域?斯普林有帮手吗   java使用Docker从命令行构建Android项目   java Android,ActionBar后退按钮(setDisplayHomeAsUpEnabled(true))重新创建父活动   java在重用FileOutputStream时应该关闭流吗?   java使用RESTAPI将文件上载到s3 bucket   Java SOAP Web服务应用程序中的mysql用户登录方法不工作   java使用多个数字计算百分比并转换为长   java Android SQLiteDatabase查询忽略空格   java如何在Javafx中比较两个字段文本   java错误:未设置java_HOME,在Eclipse安装后找不到   java在安卓中保存对象   java如何使用jaxws从返回List<Object>的服务中检索值   java Google OAuth2 JWT令牌验证异常   SpringMVC中的JavaUTF8编码问题,当从JSP表单发送POST请求中的越南语信件时   java从webview重定向到安卓应用程序   JUnit 5中多个扩展的java顺序