redhead/cached

此包最新版本(dev-master)没有可用的许可信息。

Kdyby\Aop 方法的缓存返回值方面

dev-master 2014-06-24 07:43 UTC

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:
  			...