PHP Cache Library
Provides several caching libraries like Apc, Couchbase, Memcache and Redis.



Cache Component

Cache component give you ability to store different information into memory for a limited time.

Install the component

The best way to install the component is using Composer.

composer require webiny/cache

For additional versions of the package, visit the Packagist page.

Supported drivers

The cache component supports following cache drivers:

If you are not sure which driver to use, we suggest Memcache.

Based on the selected driver, you'll have to pass different options to the constructor.

Requirements

The default bridged library is Memory by Jamm (https://github.com/jamm/Memory). It is required that you add this library to the ClassLoader :

    \Webiny\Components\ClassLoader::getInstance()->registerMap(['Jamm\Memory' => 'path to memory lib']);

For example:

    // APC
    $cache = \Webiny\Component\Cache\Cache::APC('cache-id');

    // Couchbase
    $cache = \Webiny\Component\Cache\Cache::Couchbase('CacheService', 'username', 'password', 'bucket', '127.0.0.1:8091');

    // Memcache
    $cache = \Webiny\Component\Cache\Cache::Memcache('CacheService', 'localhost', 11211);

    // Redis
    $cache = \Webiny\Component\Cache\Cache::Redis('CacheService', 'localhost', 6379);

Common operations

Once you have created your Cache instance, you can start using your cache. The cache methods are the same, no matter which driver you use:

    // write to cache
    $cache->save('myKey', 'some value', 600, ['tag1', 'tag2']);

    // read from cache
    $cache->read('myKey');

    // delete from cache
    $cache->delete('myKey');

    // delete by tag
    $cache->deleteByTag(['tag1']);

Cache config

The preferred way of defining cache drivers is creating them inside your the config file of your application.

    Cache:
      TestCache:
        Factory: "\Webiny\Component\Cache\Cache"
        Method: "Apc"
      SomeOtherCache:
          Factory: "\Webiny\Component\Cache\Cache"
          Method: "Memcache"
          Arguments: ['127.0.0.1', '11211']

See the ExampleConfig.yaml for additional details.

Under Cache you define the cache drivers by giving each of them a cache id and underneath you nest its config. The driver configuration depends on which driver you are using.

If you wish to turn off the cache, use the BlackHole driver.

The Method parameter must be a valid callback function that will return an instance of CacheStorage.

The benefit of defining cache drivers in this way is that the drivers are initialized the second Webiny Framework is loaded. This enables you to access the cache by 'CacheTrait'.

    class MyClass
    {
        use \Webiny\Component\Cache\CacheTrait;

        public function myMethod(){
            $this->cache('Frontend')->read('cache_key');
        }
    }

Custom Cache driver

To implement you own custom cache driver you must first create a class that will implement \Webiny\Component\Cache\Bridge\CacheInterface. Once you have that class, create another class with a static function that will return an instance of CacheDriver.

    class CustomCacheDriver implements \Webiny\Component\Cache\Bridge\CacheInterface
    {
        // implement the interface methods

        // static method that will return the CacheDriver
        function getDriver($cacheId, $param1, $param2, array $options){
            $driver = new static($cacheId, $param1, $param2);

            return \Webiny\Component\Cache\CacheDriver($driver, $options);
        }
    }

Now just set your class and the static method as the Method inside your config and you can access the cache over the CacheTrait.

Resources

To run unit tests, you need to use the following command:

$ cd path/to/Webiny/Component/Cache/
$ composer.phar install
$ phpunit

Make sure that you also set your cache driver details in Tests/ExampleConfig.yaml.

To learn what you can do with Webiny Framework, checkout Webiny Platform - open-source content management system.

Explore Webiny Framework components:

  • Amazon currently supports implementation of Amazon S3
  • Annotations component for parsing annotations from a class, method or a property
  • Cache provides several caching libraries like Apc, Couchbase, Memcache and Redis
  • ClassLoader a PSR-0, PSR-4 and PEAR class loader
  • Config a very handy library for parsing YAML, INI, JSON and PHP configuration files
  • Crypt library for encoding, decoding and validating hashes
  • Entity an ODM layer (currently only supports MongoDB)
  • EventManager want to do event-based development, this is a library for you
  • Http library for parsing HTTP requests and creating HTTP responses
  • Image library for image manipulation
  • Logger PSR-3 log components for logging code execution in runtime
  • Mailer component for sending emails
  • Mongo MongoDB class wrapper
  • OAuth2 library for working with OAuth2, currently supports Facebook, LinkedIn and Google+
  • REST fully featured REST library with caching, security and rate control
  • Router handles defining, parsing, creating and matching url routes
  • Security provides authorization and authentication layer
  • ServiceManager want to write truly service based, loosely-coupled code, this library provides that
  • StdLib this component provides object wrappers for Arrays, Strings, Urls and DateTime data types
  • Storage storage abstraction layer that simplifies the way you work with files and directories
  • TemplateEngine provides a layer for rendering view templates and defining template plugins and manipulators
  • TwitterOAuth library for working with Twitter API using Twitter OAuth

SIGN UP FOR EARLY BETA ACCESS:

Lastest from our blog:

The Power of the Community

In the focus of recent feedback that I got, I think there is a need for me to justify some of the decisions we made while developing Webiny Framework.

Share & subscribe: