redhead / cached
Kdyby\Aop 方法的缓存返回值方面
Requires
- kdyby/aop: @dev
- nette/nette: @dev
Requires (Dev)
- nette/tester: @dev
- redhead/mockyll: @dev
This package is not auto-updated.
Last update: 2024-09-23 15:15:37 UTC
README
Nette 框架扩展,提供 Kdyby\Aop 方法的缓存返回值功能。
安装
首先,安装 Kdyby\Aop 扩展。
使用 composer 需要扩展文件
$ composer require redhead/cached:@dev
在您的 Nette 应用程序配置中,添加要注册的扩展和缓存方面
extensions:
cached: Cached\CachedExtension
aspects:
- Cached\CachingAspect(@cacheStorage)
其中 @cacheStorage 是实现 Nette\Caching\IStorage 的服务的引用(您可以指定自己的存储,或者删除该参数,以便自动注入依赖项)
使用
现在,您可以在服务中的方法上添加注解 @Cached,如下所示
class MyService { /** * @Cached\Cached */ public function getNumber() { return rand(1, 1000); } }
注意:由于 Kdyby\Aop 中的错误,您目前不能使用 use 语句导入注解。在修复之前,您必须提供完全限定的注解名称(@Cached\Cached)
上述方法的第一次调用后,返回值将被缓存。其他所有调用将不会执行该方法,而是返回缓存值。
注解属性
您可以在注解中使用一些属性。它们指定了缓存选项。请看下面的示例
... /** * @Cached\Cached(key="myService.number", sliding=true, expire="1 hour") */ public function getNumber() { return rand(1, 1000); } ...
注解选项如下
- namespace(字符串)- 用于缓存的命名空间,默认为配置文件(见下文)的名称
- key(字符串)- 返回值在缓存中存储的键,默认为类名、方法名和序列化参数的串联
- profile(字符串)- 要使用的缓存配置文件名称,默认为 'default'(见下文)
- expire(字符串)- 指定缓存将过期的时长
- sliding(布尔值)- 是否使用滑动功能
- tags(数组)- 清除缓存时的标签
- files(数组)- 当编辑时触发缓存过期的文件路径
- priority(整数)- 优先级数字
缓存配置文件
您可以为上述选项指定跨多个建议方法共享的设置,因此您无需每次都写入它们。这些设置将在一个地方 - 在您的配置文件中!
要创建配置文件,请在配置中添加 'cached' 部分,然后添加 'profiles' 子部分。然后添加另一个名为配置文件名称的子部分,并设置配置文件选项。请看下面的示例
cached:
profiles:
myProfile:
sliding: true
expire: 1 hour
然后,将注解属性 'profile' 添加到您想共享选项的建议方法中,其值为配置文件名称。
...
/**
* @Cached\Cached(profile="myProfile")
*/
...
您可以通过添加属性来设置附加选项和/或覆盖配置文件的选项。
如果没有指定配置文件,则默认为配置文件 'default',您可以在配置中设置其选项。此配置文件的选项将用于未指定属性 'profile' 的所有注解方法。
配置文件选项
配置文件选项几乎与注解属性相同。有一些差异。您可以指定以下选项
- enabled(布尔值)- 如果为 false,则不会执行缓存,并且每次都会调用原始方法(完全禁用此配置文件的缓存),默认为 true
- namespace(与上述相同)
- expire(与上述相同)
- sliding(与上述相同)
- tags(与上述相同)
- files(与上述相同)
- 优先级(与上面相同)
配置文件选项缺少 'key' 和 'profile' 注释属性对应项(因为在这里它们没有意义)。
扩展选项
您可以在扩展的配置部分指定整个扩展的选项。
- 启用(布尔值)- 如果为 false,则禁用所有注释和配置文件的缓存,根本不进行任何缓存,默认为 true
配置示例
以下是一个完整的配置设置示例以及每个配置选项的使用方法
extensions:
aop: Kdyby\Aop\DI\AopExtension
annotations: Kdyby\Annotations\DI\AnnotationsExtension
cached: Cached\CachedExtension
aspects:
- Cached\CachingAspect
cached:
enabled: true
profiles:
default:
enabled: true
namespace: myNamespace
expire: 1 hour
sliding: true
files: [file1.php, file2.php]
tags: [tag1, tag2]
priority: 1
myProfile:
...