gpt4 book ai didi

Symfony 缓存组件 - Redis 适配器

转载 作者:可可西里 更新时间:2023-11-01 11:24:11 29 4
gpt4 key购买 nike

我已经使用 RedisAdapter 实现了 Symfony 缓存组件。现在我们喜欢在缓存键中使用冒号作为分隔符(例如 some:cache:key:25)。就像 Redis 推荐的那样。

我收到一个异常消息“包含保留字符 {}()/\@: etc.”。这在 Symfony 文档中有解释

( https://symfony.com/doc/3.4/components/cache/cache_items.html ) 这些是 PSR-6 中的保留字符。

我想知道是否有解决办法?因为我正忙于使用 Symfony 缓存组件重构缓存逻辑。但是键已经定义好了,所以我无法在不违反约定的情况下更改它们。 😭

最佳答案

如您所述,: 是 PSR-6 缓存标准中的保留字符,Symfony 的缓存组件以此为基础。

如果你想将它们保留在你的代码中,你可以编写一个适配器来获取你的 key 并将 : 替换为其他内容,然后再将其传递到常规缓存。

例如,您可以编写如下所示的适配器:

class MyCacheAdapter implements AdapterInterface
{
private $decoratedAdapter;

public function __construct(AdapterInterface $adapter)
{
$this->decoratedAdapter = $adapter;
}

public function getItem($key): CacheItemInterface
{
$key = str_replace(':', '.', $key);

return $this->decoratedAdapter->getItem($key);
}

...
}

对于所有其他方法,您只需代理对装饰服务的调用并返回结果。写起来有点烦,但是界面需要。

在您的服务配置中,您可以这样配置:

services:
App\Cache\MyCacheAdapter:
decorates: 'Symfony\Component\Cache\Adapter\RedisAdapter'
arguments:
$adapter: '@app.cache.adapter.redis'

这个配置只是一个粗略的轮廓,参数和类名都可能需要调整。无论如何用这个 service decoration您的适配器环绕原始的 redis 适配器,然后当您将其配置为由缓存组件使用时,它应该可以正常工作,您现有的 key 如 some:cache:key25 将被转换为 some.cache.key25 它们被传递到缓存组件之前,所以在错误消息发生之前。

关于Symfony 缓存组件 - Redis 适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52887092/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com