pythonic缓存方式

pycache-adaptor的Python项目详细描述


#pycache适配器

这导致了一种情况,即许多库使用不同级别的功能滚动它们自己的缓存库。这些差异导致开发人员必须学习多个系统,这些系统可能提供也可能不提供所需的功能。此外,缓存库的开发人员自己也面临一个选择,要么只支持有限数量的框架,要么创建大量的适配器类。

缓存系统的通用接口将解决这些问题。库和框架开发人员可以指望缓存系统按照他们期望的方式工作,而缓存系统的开发人员只需实现一组接口,而不必实现所有适配器。


关键字"必须"、"不得"、"必需"、"应"、"不应"、"不应"、"不应"、"建议本文档中的"red"、"may"和"optional"将按照[RFC 2119]中的描述(https://www.ietf.org/rfc/rfc2119.txt)进行解释。

/>##定义

+**调用库**-实际需要缓存服务的库或代码。此库将利用实现本标准接口的缓存服务,但不了解这些缓存服务的实现。

+**实现库**-此库负责实现本标准,以便向任何调用库提供缓存服务。实现库必须提供实现"cache\cacheitempooterface"和"cache\cacheitempinterface"接口的类。实现库必须支持至少TTL功能,如下所述,具有完整的第二粒度。

+**TTL**-项的生存时间(TTL)是从存储该项到将其视为过时之间的时间量。ttl通常由以秒为单位的时间整数或dateinterval对象定义。

+**expiration**-项目设置为过时的实际时间。这通常是通过将ttl添加到存储对象的时间来计算的,但也可以使用datetime对象显式设置。
*在1:30:00存储的TTL为300秒的项将有1:35:00的过期时间。*
实现库可以在请求的过期时间之前使项过期,但必须在达到过期时间后将其视为已过期。如果调用库要求保存项,但未指定过期时间,或指定空过期时间或ttl,则实现库可以使用配置的默认持续时间。如果未设置默认持续时间,则实现库必须将其解释为永久缓存项的请求,或者只要底层实现支持就将其解释为永久缓存项。

+**key**-至少包含一个字符的字符串,用于唯一标识缓存项。实现库必须支持由字符"a-z"、"a-z"、"0-9"、"uu"和"."组成的键,这些字符以utf-8编码的任何顺序排列,长度最多为64个字符。实现库可能支持额外的字符和编码或更长的长度,但必须至少支持该最小值。库负责根据需要对键字符串进行转义,但必须能够返回原始的未修改的键字符串。以下字符是为将来的扩展保留的,实现库不能支持它们:`{}()/\@`:

+**hit**-当调用库按键请求一个项,并且找到该项的匹配值,并且该值ue尚未过期,并且该值不因其他原因无效。调用库应确保对所有"get()"调用验证"is hit()"。

+**未命中**-缓存未命中与缓存命中相反。当调用库按键请求一个项,但找不到该键的值,或找到该值但已过期,或该值因其他原因无效时,将发生缓存未命中。过期的值必须始终被视为缓存未命中。

+**延迟**-延迟的缓存保存表示缓存项可能不会立即由池持久化。池对象可能会延迟持久化延迟缓存项,以便利用某些存储引擎支持的大容量集操作。池必须确保所有延迟的缓存项最终都被持久化,并且数据不会丢失,并且可以在调用库请求它们被持久化之前将它们持久化。调用库调用"commit()"方法时,必须持久化所有未完成的延迟项。实现库可以使用任何适当的逻辑来确定何时持久化延迟项,例如对象析构函数、在"save()"上持久化所有项、超时或最大项检查或任何其他适当的逻辑。对已延迟的缓存项的请求必须返回延迟但尚未持久化的项。

他一如往常地回来了。包括变量类型。也就是说,如果(int)5是保存的值,则返回(string)5是一个错误。与它们的兼容性只是用作可接受对象值的基线。

池表示缓存系统中的项集合。池是它包含的所有项的逻辑存储库。所有可缓存项都作为项对象从池中检索,并且与整个缓存对象世界的所有交互都通过池进行。

**项**


项表示池中的单个键/值对。键是项的主要唯一标识符,必须是不可变的。该值可以随时更改。

因此,缓存系统中的错误不应导致应用程序失败。因此,实现库不能抛出接口定义的异常以外的异常,并且应该捕获由底层数据存储触发的任何错误或异常,并且不允许它们冒泡。

o适当的管理员。

post条件相同(键不存在,或池为空),因此不存在错误条件。


\interfaces

**cacheiteminterface**


cache\cacheitempoiface对象封装缓存项的存储和检索。每个cache\cacheitempointerface都由cache\cacheitempointerface对象生成,该对象负责任何必需的设置,并将该对象与唯一键关联。cache\cacheiteminterface对象必须能够存储和检索任何类型的php值defi在本文档的数据部分中。


调用库不能实例化项对象本身。只能通过getitem()方法从池对象请求它们。调用库不应假定一个实现库创建的项与另一个实现库中的池兼容。

**cacheitempooterface**


cache\cacheitempooterface的主要目的是接受调用库中的密钥并返回关联的cache\cacheitempointerface对象。它也是与整个缓存集合交互的主要点。池的所有配置和初始化由实现库决定。

**cache exception**


此异常接口用于发生严重错误时,包括但不限于连接到缓存服务器或提供的无效凭据等缓存设置。

修订库必须实现此接口。

\reference
php-fig:[psr-6](http://www.php-fig.org/psr/psr-6)

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

推荐PyPI第三方库


热门话题
java在“for语句”中打印数组   使用jaxb外部绑定自定义时发生java错误   jdbc如何在Java(ProcessBuilder)中创建GlassFish的连接池   java正在尝试打印名称   java在Spring表达式语言中使用正则表达式提取子字符串   java如何将字符串流式传输到另一个类   jakarta ee ResourceBundle来自Java/Struts和replace表达式   tomcat支持java的可能原因。网SocketInputStream。socketRead0   java无法从joda dateTime对象中删除毫秒   java永远隐藏导航栏   具有更多字段的java ItemizeOverlay   使用jsptag的java搜索记录   java如何在Android Q中检查互联网连接?   java如果1是标准的EOF字节,为什么DataInputStream会这样做?   线程环境中的多线程mongodb java客户端断开连接   java正则表达式中的非捕获组   java疯狂拍卖定制售价   java Mybatis自动映射以支持dot   java在线获取原始格式的JSON URL   java意外字符“ï”,使用Jackson解析JSON