paveldanilin/response-cache-bundle

一个Symfony响应缓存包

安装: 774

依赖项: 0

建议者: 0

安全: 0

星星: 3

关注者: 2

分支: 0

公开问题: 0

类型:symfony-bundle

dev-main 2022-02-02 22:18 UTC

This package is auto-updated.

Last update: 2024-09-29 06:14:36 UTC


README

安装

composer require paveldanilin/response-cache-bundle

配置

# Default values
response_cache:
  lock:
    factory: 'lock.response_cache.factory'
  controller:
    dir: '%kernel.project_dir%/src'

lock.factory:一个锁工厂服务,了解更多关于锁组件配置的信息

controller.dir:用于注解扫描的控制器目录。

用法

@Cacheable

为控制器操作方法启用缓存行为。

@Cacheable(
    pool="<cache.pool.name>",
    key="<item.key.name>",
    ttl="<expires.after.sec>",
    condition="<request.condition.expression>"
)

默认参数

  • key - 类名和方法名的连接:App\Controller\MyController_doHeavyComputation
  • pool - cache.app
  • ttl - null(永远不会过期)
  • condition - null
/**
  * @Cacheable()
  * @Route("/api/v1/work", methods={"GET"}, name="do.work")
  * @return JsonResponse
  */
public function doWork(Request $request): JsonResponse
{
    $data = doHeavyComputations();
    return new JsonResponse($data);
}

有两种类型的键

  • 静态
  • 动态

静态键

静态键是一个空值 <className_methodName> 或一个字符串 '<static_key>'

例如:@Cacheable()@Cacheable(key='my_item')

动态键

动态键从井号开始,即 #<expression>

Symfony表达式语言 用于动态键的计算。

在表达式中可以使用以下变量

在表达式中可以使用以下函数

示例

@Cacheable(key="#request.getMethod()~request.getRequestUri()")
@Cacheable(key="#query_val('id', 'def_value')")
@Cacheable(key="#query_val(['id', 'x_query_param'])")
@Cacheable(key="#route_val('id')")
@Cacheable(key="#route_val(['id', 'x_route_param'])")
// Request body: {"account": {"id": 123}}
// The resolved key: 123
@Cacheable(key="#body_json('account.id')")

您可以 定义 自己的缓存池并使用它代替默认的 cache.app。请注意,缓存池必须定义为公共的。

TTL

缓存项的存活时间(秒)。如果没有定义,将使用池的默认值。

条件

如果我们想对何时激活注解有更多的控制,我们可以使用一个条件参数来参数化@Cacheable,该参数接受一个Symfony表达式,并确保根据评估该表达式来缓存结果。

@CacheEvict

@CacheEvict(pool=<cache.pool.name>, key=<item.key.name>)

控制台命令

  • php ./bin/console debug:response-cache console-output.png