多了个换行符
kis龍
2年前
修改理由:
相关信息:
- 类型:文档文章
- 文章: PSR-6 缓存接口规范
- 文档: 《PHP PSR 标准规范()》
此投稿已在 3年前 合并。
内容修改:
Old | New | Differences |
---|---|---|
1 | ||
2 | 1 | 缓存接口 |
3 | 2 | ================= |
4 | 3 | |
5 | 缓存是提升应用性能的常用手段,为框架中最通用的功能,每个框架也都推出专属的、功能多样的缓存库。这些差别使得开发人员不得不学习多种系统,而很多可能是他们并不需要的功能。此外,缓存库的开发者同样面临着一个窘境,是只支持有限数量的几个框架还是创建一堆庞 | |
6 | 大的适配器类。 | |
4 | 缓存是提升应用性能的常用手段,为框架中最通用的功能,每个框架也都推出专属的、功能多样的缓存库。这些差别使得开发人员不得不学习多种系统,而很多可能是他们并不需要的功能。此外,缓存库的开发者同样面临着一个窘境,是只支持有限数量的几个框架还是创建一堆庞大的适配器类。 | |
7 | 5 | |
8 | 6 | 一个通用的缓存系统接口可以解决掉这些问题。库和框架的开发人员能够知道缓存系统会按照他们所预期的方式工作,缓存系统的开发人员只需要实现单一的接口,而不用去开发各种各样的适配器。 |
9 | 7 | |
10 | 8 | 本文件中的 `必须`,`不得`,`需要`,`应`,`不应`,`应该`,`不应该`,`推荐`,`可能` 和 `可选` 等能愿动词按照 [RFC 2119](http://www.ietf.org/rfc/rfc2119.txt) 中的描述进行解释。 |
11 | 9 | |
12 | ||
10 | ||
13 | 11 | |
14 | 12 | 目标 |
15 | 13 | ---- | … | … |
27 | 25 | |
28 | 26 | - **过期时间 (Expiration)** - 定义准确的过期时间点,一般为缓存存储发生的时间点加上 TTL 时间值,也可以指定一个 DateTime 对象。假如一个缓存项的 TTL 设置为 300 秒,保存于 1:30:00 ,那么缓存项的过期时间为 1:35:00。实现类库 **可以** 让缓存项提前过期,但是 **必须** 在到达过期时间时立即把缓存项标示为过期。如果调用类库在保存一个缓存项的时候未设置「过期时间」、或者设置了 `null` 作为过期时间(或者 TTL 设置为 `null`),实现类库 **可以** 使用默认自行配置的一个时间。如果没有默认时间,实现类库 **必须**把存储时间当做 `永久性` 存储,或者按照底层驱动能支持的最长时间作为保持时间。 |
29 | 27 | |
30 | ||
28 | ||
31 | 29 | |
32 | 30 | - **键 (KEY)** - 长度大于 1 的字串,用作缓存项在缓存系统里的唯一标识符。实现类库 **必须** 支持「键」规则 `A-Z`, `a-z`, `0-9`, `_`, 和 `.` 任何顺序的 UTF-8 编码,长度小于 64 位。实现类库 **可以** 支持更多的编码或者更长的长度,不过 **必须** 支持至少以上指定 |
33 | 31 | 的编码和长度。实现类库可自行实现对「键」的转义,但是 **必须** 保证能够无损的返回「键」字串。以下的字串作为系统保留: `{}()/\@:`,**一定不可** 作为「键」的命名支持。 | … | … |
39 | 37 | - **延迟 (Deferred)** - 一个延迟的缓存,指的是这个缓存项可能不会立刻被存储到物理缓存池里。一个缓存池对象 **可以** 对一个指定延迟的缓存项进行延迟存储,这样做的好处是可以利用一些缓存服务器提供 |
40 | 38 | 的批量插入功能。缓存池 **必须** 能对所有延迟缓存最终能持久化,并且不会丢失。**可以** 在调用类库还未发起保存请求之前就做持久化。当调用类库调用 `commit()` 方法时,所有的延迟缓存都 **必须** 做持久化。实现类库 **可以** 自行决定使用什么逻辑来触发数据持久化,如对象的 `析构方法 (destructor)` 内、调用 `save()` 时持久化、倒计时保存或者触及最大数量时保存等。当请求一个延迟缓存项时,**必须** 返回一个延迟,未持久化的缓存项对象。 |
41 | 39 | |
42 | ||
40 | ||
43 | 41 | 数据 |
44 | 42 | ---- |
45 | 43 | … | … |
58 | 56 | 如果由于某些技术原因不能准确保存,实现类库 **必须** 返回缓存未命中,而不是损坏的数据。 |
59 | 57 | |
60 | 58 | |
61 | ||
59 | ||
62 | 60 | 主要概念 |
63 | 61 | ------------ |
64 | 62 | … | … |
79 | 77 | |
80 | 78 | 调用类库发起删除缓存项的请求,或者清空整个缓冲池子的请求,「键」不存在的话 **必须** 不能当成是有错误发生。后置条件是一样的,如果取数据时,「键」不存在的话 **必须** 不能当成是有错误发生。 |
81 | 79 | |
82 | ||
80 | ||
83 | 81 | |
84 | 82 | 接口 |
85 | 83 | ---------- | … | … |
182 | 180 | } |
183 | 181 | ``` |
184 | 182 | |
185 | ||
183 | ||
186 | 184 | ### CacheItemPoolInterface |
187 | 185 | |
188 | 186 | Cache\CacheItemPoolInterface 的主要目的是从调用类库接收「键」,然后返回对应的 Cache\CacheItemInterface 对象。 | … | … |
316 | 314 | } |
317 | 315 | ``` |
318 | 316 | |
319 | ||
317 | ||
320 | 318 | ### CacheException |
321 | 319 | |
322 | 320 | 异常接口用于严重错误发生的时候,包括但不限于缓存设置错误,例如:无法连接到缓存服务器、提供了无效的凭证。 |