Multi Cache Laravel (Redis)

redis

Cache dengan penyimpanan menggunakan memory usage memang banyak varian. Laravel sendiri me-support beberapa tipe untuk cache memory seperti APC, memcache, dan Redis.

Kemuadahan setup dari cache laravel memang sangat membantu dari sisi Developer atau Programmer untuk memilih cache apa yang cocok dengan aplikasi atau web yang sedang dibuatnya.

Tulisan ini lebih condong penggunaan Redis sebagai cache yang membantu kinerja laravel untuk optimasi dari sisi kecepatan pengaksesan.

Kasus yang akan saya angkat disini adalah penggunaan multi cache redis dengan pemanfaatan Predis Library sebagai secondary cache yang berfungsi sebagai key value store.

Dikarenakan config laravel hanya memungkinakan penggunaan cache redis dengan 1 (satu) database saja –> app/config/database.php. Jika kita ingin menggunakan lebih dari 1 (satu) database di Redis, maka harus ada setting config tambahan atau pembutan Controller sebagai tools tambahan penggunaan cache.

Default setting Redis Cache Laravel
app/config/database.php

'redis' => array(
   'cluster' => false,
   'default' => array(
      'host'     => '127.0.0.1',
      'port'     => 6379,
      'database' => 0, // selected database
   ),
),

app/config/cache.php

'driver' => 'redis',

Controller Tools untuk penggunaan multi database
RedisController.php

<?php
use Predis\Client;
class RedisController extends BaseController
{
    public static $redis;
    public static $scheme = 'tcp';
    public static $host = '127.0.0.1';
    public static $port = '6379';
    public static $database = '1'; //selected database
    public static $ttl = 3600; // 1 hour

    function __construct(){
        try{
            $params = [
                'scheme' => self::$scheme,
                'host'   => self::$host,
                'port'   => self::$port,
                'database'   => self::$database,
            ];
            self::$redis = new Client($params);
        }catch (Exception $e) {
            echo "Couldn't connected to Redis";
            echo $e->getMessage();
        }
    }

    public static function set($key, $value, $ttl = null){
        if(empty($key) || empty($value)){
            return false;
        }else{
            if(empty($ttl)){
                $ttl = self::$ttl;
            }
        }
        $value = serialize($value);
        self::$redis->set($key, $value);
        if($ttl > 0){
            self::$redis->expire($key, $ttl);
        }
        return true;
    }

    public static function get($key){
        if(self::$redis->exists($key)){
            $result = self::$redis->get($key);
            return unserialize($result);
        }else{
            return false;
        }
    }

    public static function forget($key){
        if(self::$redis->exists($key)){
            self::$redis->expire($key,0);
            return TRUE;
        }else{
            return FALSE;
        }
    }

    public static function has($key){
        if(self::$redis->exists($key)){
            return TRUE;
        }else {
            return FALSE;
        }
    }

    public static function setTtl($key,$ttl){
        try{
            self::$redis->expire($key, $ttl);
            return TRUE;
        }catch (Exception $e){
            return FALSE;
        }
    }

    public static function checkTtl($key){
        try{
            echo ' expired at : '.date('Y-m-d H:i:s',strtotime( date('Y-m-d H:i:s')) + (int)self::$redis->ttl($key));
        }catch (Exception $e){
            return FALSE;
        }
    }
    
}

Contoh code di atas adalah solusi kecil yang akan sedikit banyak membatu pekerjaan yang berkenaan dengan cache redis.

 

Terima kasih,

Kun Budiharta

Iklan

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s