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

durabledict的Python项目详细描述


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

数据存储。所有dicts类都位于"durabledict"包中。目前,durabledict提供以下指令:

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


每个字典类都有一个不同的`````` init``方法,该方法采用不同的参数,因此请查阅它们的文档以获取特定的用法详细信息。

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

from durabledict import redisdict
from redis import redis

redis())

>>>gt;"foogle"

删除一个值,access接收一个keyerror
del settings['foo']
settings['foo']
>;>keyerror

因此,任何"可pickle"的对象都可以保存到那些存储中。

用作访问dict值的缓存。只有当持久存储中存储的值实际发生更改时,才会使用持久存储中的新值更新此缓存。

检查持久存储中的数据是否已更改,每个durable dict后端负责提供一个快速的``last_updated()``方法,该方法可以快速告诉dict持久存储中的任何值最后一次更新的时间。例如,``durabledict``构造函数需要一个作为参数传入的``cache``对象,该对象提供缓存线接口方法的实现,用于维护``last_updated``状态。memcache客户端是这个对象的一个很好的候选对象。

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

手动控制持久性存储同步
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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

因此,不与持久存储同步可能对您有利在每次读取dict之前,而是手动控制同步。为此,在构造dict时传递"autosync=false",即:从durabledict import redisdict

从redis import redisdict


autosync=false)


这会导致字典的行为如下:

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

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

encoding
----


所有"durabledict"实现都接受一个"encoding"关键字参数,定义字典在将数据序列化到持久数据存储区或从持久数据存储区序列化数据时应使用的编码对象。"encoding"的首要目标是将dictionary value对象序列化为适合持久存储的格式,然后在以后将该对象从其序列化表示形式重构为内存中的对象。pickle作为它的编码格式,允许它轻松地序列化复杂的对象,代价是"已知的安全含义":安全性和其他限制。有关pickle的概述,请参阅"this ibm developerworks":devworks文章。安全性:https://docs.python.org/release/3.0.1/library/pickle.html\pickle restrict
…_ devworks:http://www.ibm.com/developerworks/library/l-pypers/

对于"memoryDict"实现)。

这个类以模型的管理器为例,以及"key-col"和"value-col"参数,这些参数可以用来告诉"durabledict"对象上应该使用哪些列来存储数据。

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

django.core.signals.request\u started.connect(settings.sync)

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

1.`` persist(key,value)```-在数据存储区的key``处persist``value`.
2.`` deparsist(key)``-删除位于``key``f的值从你的数据存储中。`` durables()``-返回数据存储区中所有密钥的"key=val"dict。
4。`` last_updated()``—上次更新数据存储中的数据时的可比较值。

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

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

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

推荐PyPI第三方库


热门话题
由于测试失败,java testcontainers maven构建失败   java实现jacobi算法实现laplace方程   java中的多线程:如何在不等待所有线程使用ExecutorService完成任务的情况下终止所有线程的执行?   java Hello World不在Android Studio 3中工作   ubuntu Tomcat7的Java版本不正确   java Javafx内存泄漏   对于手动实现的Spring数据存储库方法,我应该使用Java8默认方法吗?   googleappengine中的java添加过滤查询   html当使用JSOUP库在Java中读取标签时,如何保留标签(如<br>、<ul>、<li>、<p>等)的含义?   编码为什么jasper生成的报告在Java中不显示西里尔语(保加利亚语)?   java有没有办法隐藏当前位置和jdk动作?   java找出编译原型文件的版本   有没有办法在运行时更改java方法的访问修饰符?   语法字符串。。。Java中的参数   java数组元素在添加其他元素时会相互覆盖   eclipse中的java GWT项目   java如何为spring rest模板请求将动态json属性名映射到jackson   java无法在Windows 10上找到特定的JDK   在xml字符串和java字符串之间提取正则表达式子字符串