Git Product home page Git Product logo

doctrinecachebundle's Introduction

DoctrineCacheBundle

Symfony2 Bundle for Doctrine Cache

Master: Build Status

Master: Coverage Status

Installation

Installing this bundle can be done through these simple steps:

  1. Add this bundle to your project as a composer dependency:
composer require doctrine/doctrine-cache-bundle
  1. Add this bundle in your application kernel:

    // app/AppKernel.php
    public function registerBundles()
    {
        // ...
        $bundles[] = new \Doctrine\Bundle\DoctrineCacheBundle\DoctrineCacheBundle();
    
        return $bundles;
    }
  2. Check if the bundle is configured correctly:

    <!-- app/config/config.xml -->
    <?xml version="1.0" encoding="UTF-8" ?>
    <container xmlns="http://symfony.com/schema/dic/services"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:doctrine-cache="http://doctrine-project.org/schemas/symfony-dic/cache"
        xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd
            http://doctrine-project.org/schemas/symfony-dic/cache http://doctrine-project.org/schemas/symfony-dic/cache/doctrine_cache-1.0.xsd">
    
        <doctrine-cache:doctrine-cache>
             <doctrine-cache:provider name="my_apc_metadata_cache">
                <doctrine-cache:type>apc</doctrine-cache:type>
                <doctrine-cache:namespace>metadata_cache_ns</doctrine-cache:namespace>
             </doctrine-cache:provider>
            <doctrine-cache:provider name="my_apc_query_cache" namespace="query_cache_ns">
                <doctrine-cache:apc/>
            <doctrine-cache:provider>
        </doctrine-cache:doctrine-cache>
    </container>
    # app/config/config.yml
    
    doctrine_cache:
        providers:
            my_apc_metadata_cache:
                type: apc
                namespace: metadata_cache_ns
            my_apc_query_cache:
                namespace: query_cache_ns
                apc: ~

Usage

Simply use doctrine_cache.providers.{provider_name} to inject it into the desired service.

Check the following sample:

$apcCache   = $this->container->get('doctrine_cache.providers.my_apc_cache');
$arrayCache = $this->container->get('doctrine_cache.providers.my_array_cache');

Provider configuration

<!-- app/config/doctrine_cache.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<dic:container xmlns="http://doctrine-project.org/schemas/symfony-dic/cache"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:srv="http://symfony.com/schema/dic/services"
    xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd
        http://doctrine-project.org/schemas/symfony-dic/cache http://doctrine-project.org/schemas/symfony-dic/cache/doctrine_cache-1.0.xsd">

<srv:container>
    <doctrine-cache>
         <provider name="my_memcached_cache">
             <memcache>
                 <server host="memcached01.ss" port="11211"/>
                 <server>
                    <host>memcached01.ss</host>
                    <port>11211</port>
                 </server>
             </memcache>
         </provider>

         <provider name="my_riak_cache">
             <riak host="localhost" port="8087">
                 <bucket-name>my_bucket</bucket-name>
                 <bucket-property-list>
                     <allow-multiple>false</allow-multiple>
                     <n-value>1</n-value>
                 </bucket-property-list>
             </riak>
         </provider>
    </doctrine-cache>
</srv:container>
# app/config/doctrine_cache.yml

doctrine_cache:
    providers:
        my_memcached_cache:
            memcached:
                servers:
                    memcached01.ss: 11211
                    memcached02.ss:
                        port: 11211
        my_riak_cache:
            riak:
                host: localhost
                port: 8087
                bucket_name: my_bucket
                bucket_property_list:
                    allow_multiple: false
                    n_value: 1
See Cache providers for all supported cache provider and its specific configurations

Service aliases

<!-- app/config/doctrine_cache.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<dic:container xmlns="http://doctrine-project.org/schemas/symfony-dic/cache"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:srv="http://symfony.com/schema/dic/services"
    xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd
        http://doctrine-project.org/schemas/symfony-dic/cache http://doctrine-project.org/schemas/symfony-dic/cache/doctrine_cache-1.0.xsd">

<srv:container>
    <doctrine-cache>
        <alias key="cache_apc">my_apc_cache</alias>

        <provider name="my_apc_cache">
            <type>apc</type>
            <namespace>my_apc_cache_ns</namespace>
            <alias>apc_cache</alias>
        </provider>
    </doctrine-cache>
</srv:container>
# app/config/doctrine_cache.yml

doctrine_cache:
    aliases:
        cache_apc: my_apc_cache

    providers:
        my_apc_cache:
            type: apc
            namespace: my_apc_cache_ns
            aliases:
                - apc_cache

You can access the cache providers by using created aliases:

$apcCache  = $this->container->get('apc_cache');
$cacheApc  = $this->container->get('cache_apc');

Custom providers

Is possible to register a custom cache driver

<!-- app/config/doctrine_cache.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<dic:container xmlns="http://doctrine-project.org/schemas/symfony-dic/cache"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:srv="http://symfony.com/schema/dic/services"
    xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd
        http://doctrine-project.org/schemas/symfony-dic/cache http://doctrine-project.org/schemas/symfony-dic/cache/doctrine_cache-1.0.xsd">

<srv:container>
    <srv:services>
        <srv:service id="my_custom_provider_service" class="MyCustomType">
            <!-- ... -->
        </srv:service>
     </srv:services>

    <doctrine-cache>
        <!-- register your custom cache provider -->
        <custom-provider type="my_custom_type">
            <prototype>my_custom_provider_service</prototype>
            <definition-class>MyCustomTypeDefinition</definition-class> <!-- optional configuration -->
        </custom-provider>

         <provider name="my_custom_type_provider">
            <my_custom_type>
                 <config-foo>foo</config-foo>
                 <config-bar>bar</config-bar>
             </my_custom_type>
         </provider>
    </doctrine-cache>
</srv:container>
# app/config/doctrine_cache.yml

services:
    my_custom_provider_service:
        class: "MyCustomType"
        # ...

doctrine_cache:
    custom_providers:
        my_custom_type:
            prototype:  "my_custom_provider_service"
            definition_class: "MyCustomTypeDefinition" # optional configuration

    providers:
        my_custom_type_provider:
            my_custom_type:
                config_foo: "foo"
                config_bar: "bar"
Definition class is a optional configuration that will parse option arguments given to your custom cache driver See CacheDefinition

Service parameter

Is possible to configure a cache provider using a specific connection/bucket/collection

<!-- app/config/doctrine_cache.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<dic:container xmlns="http://doctrine-project.org/schemas/symfony-dic/cache"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:srv="http://symfony.com/schema/dic/services"
    xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd
        http://doctrine-project.org/schemas/symfony-dic/cache http://doctrine-project.org/schemas/symfony-dic/cache/doctrine_cache-1.0.xsd">

<srv:container>
    <srv:services>
        <srv:service id="my_riak_connection_service" class="Riak\Connection">
            <!-- ... -->
        </srv:service>

        <srv:service id="my_riak_bucket_service" class="Riak\Bucket">
            <!-- ... -->
        </srv:service>

        <srv:service id="my_memcached_connection_service" class="Memcached">
            <!-- ... -->
        </srv:service>
     </srv:services>

    <doctrine-cache>
         <provider  name="service_bucket_riak_provider">
             <riak bucket-id="my_riak_bucket_service"/>
         </provider>

         <provider name="service_connection_riak_provider">
             <riak connection-id="my_riak_connection_service">
                 <bucket-name>my_bucket_name</bucket-name>
             </riak>
         </provider>

         <provider name="service_connection_memcached_provider">
             <memcached connection-id="my_memcached_connection_service"/>
         </provider>
    </doctrine-cache>
</srv:container>
# app/config/doctrine_cache.yml

services:
    my_riak_connection_service:
        class: "Riak\Connection"
        # ...

    my_riak_bucket_service:
        class: "Riak\Bucket"
        # ...

    my_memcached_connection_service:
        class: "Memcached"
        # ...

doctrine_cache:
    providers:
        service_bucket_riak_provider:
            riak:
                bucket_id : "my_riak_bucket_service"

        service_connection_riak_provider:
            riak:
                connection_id: "my_riak_connection_service"
                bucket_name: "my_bucket_name"

        service_connection_memcached_provider:
            memcached:
                connection_id: "my_memcached_connection_service"
See Cache providers for all specific configurations

Symfony acl cache

<!-- app/config/doctrine_cache.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<dic:container xmlns="http://doctrine-project.org/schemas/symfony-dic/cache"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:srv="http://symfony.com/schema/dic/services"
    xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd
        http://doctrine-project.org/schemas/symfony-dic/cache http://doctrine-project.org/schemas/symfony-dic/cache/doctrine_cache-1.0.xsd">

<srv:container>
    <doctrine-cache>
        <acl-cache id="doctrine_cache.providers.acl_apc_provider"/>

        <provider name="acl_apc_provider" type="apc"/>
    </doctrine-cache>
</srv:container>
# app/config/doctrine_cache.yml

doctrine_cache:
    acl_cache:
        id: 'doctrine_cache.providers.acl_apc_provider'
    providers:
        acl_apc_provider:
            type: 'apc'

Check the following sample:

/** @var $aclCache Symfony\Component\Security\Acl\Model\AclCacheInterface */
$aclCache = $this->container->get('security.acl.cache');

Cache providers

apc

array

chain

- providers - List of cache providers

couchbase

- connection_id - Couchbase connection service id
- hostnames     - couchbase hostname list
- bucket_name   - couchbase bucket name
- username      - couchbase username
- password      - couchbase password

file_system

- extension    - file extension
- directory    - cache directory

mongodb

- connection_id     - MongoClient service id
- collection_id     - MongoCollection service id
- server            - mongodb server uri
- database_name     - mongodb database name
- collection_name   - mongodb collection name

memcache

- connection_id - Memcache connection service id
- servers       - Server list
    - server
        - host - memcache host
        - port - memcache port

memcached

- connection_id - Memcache connection service id
- servers       - Server list
    - server
        - host - memcached host
        - port - memcached port

php_file

- extension    - file extension
- directory    - cache directory

redis

- connection_id - Redis connection service id
- host          - redis host
- port          - redis port

riak

- connection_id                 - Riak\Connection service id
- bucket_id                     - Riak\Bucket service id
- host                          - riak host
- port                          - riak port
- bucket_name                   - riak bucket name
- bucket_property_list          - riak bucket configuration (property list)
    - allow_multiple: false     - riak bucket allow multiple configuration
    - n_value: 1                - riak bucket n-value configuration

sqlite3

- connection_id - SQLite3 connection service id
- file_name     - SQLite3 database file name
- table_name    - Cache table name

void

xcache

wincache

zenddata

Check the doctrine-cache documentation Page for a better understanding.

doctrinecachebundle's People

Contributors

77web avatar beberlei avatar cdaguerre avatar davidprevot avatar dbu avatar dragonwize avatar ellisv avatar emanueleminotto avatar fabiobatsilva avatar guilhermeblanco avatar kinncj avatar lsmith77 avatar ocramius avatar pborreli avatar stof avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.