正如您所提到:
的,是 PSR-6 缓存标准中的一个保留字符,Symfony 的缓存组件建立在它之上。
如果您想将它们保留在您的代码中,您可以编写一个适配器来获取您的密钥并:
在将其传递给常规缓存之前将其替换为其他内容。
因此,例如,您可以编写一个看起来像这样的适配器:
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'
这个配置只是一个粗略的轮廓,参数和类名可能需要调整。在任何情况下,使用此服务装饰,您的适配器都会包裹原始 redis 适配器,然后当您将其配置为由缓存组件使用时,它应该可以正常工作,您现有的密钥(如在它们传递到缓存组件之前some:cache:key25
)将被转换为,所以在错误消息发生之前。some.cache.key25