2017-10-30 7 views
0

私はdocumentationを探していたので、APi結果をキャッシュするためにそれを使用する方法を理解しました。DoctrineCacheBundle:redisでそれを使用するためのドキュメントをアンダーサートすることはできません

構成を設定してredisまたはpredisのどちらでも動作させる方法を理解できません。

私は、次のコン造形を試してみました:

doctrine_cache: 
    aliases: 
     my_cache: 'redis' 

    providers: 
     redis: 
      host: '%redis_host%' 
      port: '%redis_port%' 
      aliases: 
      - my_cache 

しかし、私はと私のコンテナをデバッグするtryintたとおり

php bin/console debug:container doctrine 

私はエラーを得た:

"host" is an unrecognized Doctrine cache driver.

私はまた、次の設定を試しました:

doctrine_cache: 
    aliases: 
     my_cache: 'redis' 

    providers: 
     redis: 
      type: 'redis' 
      host: '%redis_host%' 
      port: '%redis_port%' 
      aliases: 
      - my_cache 

非常に同じエラーです。また、ドキュメントでは、設定オプションを渡す方法があまり明確ではありません。さらに、上述したように、redisとpredisの両方がバンドルにネイティブに提供されています。

+0

コードまたは実際のコードを貼り付けた結果であるかどうかはわかりませんが、設定ではインデント用に2スペースと4スペースが混在しています – malarzm

答えて

1

redisの最初の設定です。その後

doctrine_cache: 
    aliases: 
     cache: "%cache_provider%" 
    providers: 
     redis_cache: 
      namespace: "%redis_cache_keyspace%" 
      redis: 
       host: "%redis_cache_host%" 
       port: "%redis_cache_port%" 
     array_cache: 
      type: array 

、parameters.yml設定:私はRedisServiceを作成し

cache_provider: array_cache 
redis_cache_host: localhost 
redis_cache_port: 6379 
redis_cache_keyspace: [your_keyspace] 

を:

<?php 

namespace AppBundle\Service; 

use Doctrine\Common\Cache\Cache; 

class RedisService 
{ 
    private $cache; 
    /** 
    * RedisService constructor. 
    * @param Cache $cache 
    */ 
    public function __construct(Cache $cache) 
    { 
     $this->cache = $cache; 
    } 

    public function insert($key, $value, $lifetime = null) 
    { 
     return $this->cache->save($key, $value, $lifetime); 
    } 

    public function get($key) 
    { 
     return $this->cache->fetch($key); 
    } 

    public function delete($key) 
    { 
     return $this->cache->delete($key); 
    } 

} 

は、この行を追加します。

redis_service: 
    class: AppBundle\Service\RedisService 
    arguments: ["@doctrine_cache.providers.redis_cache"] 

をservices.ymlそして、あなたが使用することができますそれはどこでも。サンプル;

<?php 

namespace AppBundle\Controller; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpFoundation\Response; 
use Symfony\Component\Routing\Annotation\Route; 

/** 
* @package AppBundle\Controller 
* @Route("/") 
*/ 
class RedisApiController extends Controller 
{ 

    /** 
    * @return object 
    */ 
    public function getRedisService() 
    { 
     return $this->get('redis.service'); 
    } 

    /** 
    * @Route("/insert", name="insert") 
    */ 
    public function insertAction(){ 
     $this->getRedisService()->insert('website', 'http://mertblog.net', 3600); 
    } 

    /** 
    * @Route("/get", name="get") 
    */ 
    public function getAction(){ 
     $webSite = $this->getRedisService()->get('website'); 
    } 

    /** 
    * @Route("/delete", name="delete") 
    */ 
    public function deleteAction(){ 
     $this->getRedisService()->delete('website'); 
    } 
} 
関連する問題