Компонент Symfony Cache - адаптер Redis - PullRequest
0 голосов
/ 19 октября 2018

Я реализовал компонент кэша Symfony, используя RedisAdapter.Теперь нам нравится использовать двоеточие в качестве разделителя в ключах кэша (например, some: cache: key: 25).Так же, как рекомендует Redis.

Я получаю исключение, говорящее "contains reserved characters {}()/\@: etc.".Это объясняется в документации Symfony

(https://symfony.com/doc/3.4/components/cache/cache_items.html)), что это зарезервированные символы в PSR-6.

Мне нравится знать, есть ли способ обойти это?занят рефакторингом логики кэша с использованием Symfony Cache Component. Но ключи уже определены, поэтому я не могу изменить их без нарушения соглашений. ?

1 Ответ

0 голосов
/ 19 октября 2018

Как вы отметили : - это зарезервированный символ в стандарте кэширования 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 до они передаются в компонент кеша, поэтому до появления сообщения об ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...