v2.x Caché de recursos (en json)

Tema en 'Mods' iniciado por prinick, el 1 Oct 2017.

  1. prinick

    prinick Ocrend Developer Miembro del Staff

    Registrado:
    28 Sep 2017
    Mensajes:
    76
    Me Gusta recibidos:
    9
    Puntos de trofeo:
    8
    Género:
    Masculino
    Profesión:
    Engineer
    País:
    venezuela
    Nombre: Caché de recursos guardados en archivos .json
    Versión: v2.0.x

    Instalación:
    Creamos el fichero app/models/Cache.php en nuestro proyecto:

    PHP:
    <?php

    /*
     * This file is part of the Ocrend Framewok 2 package.
     *
     * (c) Ocrend Software <info@ocrend.com>
     *
     * For the full copyright and license information, please view the LICENSE
     * file that was distributed with this source code.
     */

    namespace app\models;

    use 
    Ocrend\Kernel\Helpers\Files;

    /**
     * Modelo Cache
     *
     * @author Brayan Narváez <prinick@ocrend.com>
     */

    class Cache {
     
        
    /**
            * Ruta de guardado de caché
            *
            * @var string
        */
        
    const CACHE_DIR API_INTERFACE 'app/.cache/';

        
    /**
            * Obtiene el caché de un archivo
            *
            * @param string $name: Nombre del archivo
            *
            * @return null|int|bool|array con el contenido
        */
        
    public function get(string $name) {
            if(
    file_exists(self::CACHE_DIR $name '.json')) {
                
    $content file_get_contents(self::CACHE_DIR $name '.json');
                
    $content json_decode($contenttrue);

                if(
    array_key_exists('no_logic_array'$content)) {
                    return 
    $content['no_logic_array'];
                }

                return 
    $content;
            }

            return 
    null;
        }

        
    /**
            * Escribe un archivo de caché
            *
            * @param string $name: Nombre del archivo
            * @param mixed $element: Elemento a escribir en el caché
            *
            * @return void
        */
        
    public function set(string $name$element) {
            
    Files::delete_file(self::CACHE_DIR $name '.json');

            
    # Si no es un arreglo, es un entero o un boolean
            
    if(!is_array($element)) {
                
    $element = array(
                    
    'no_logic_array' => $element
                
    );
            }

            
    Files::write_file(self::CACHE_DIR $name '.json'json_encode($element));
        }

        
    /**
          * __construct()
        */
        
    public function __construct() {
            global 
    $config;

            if(
    $config['framework']['debug']) {
                
    $cache = array();
                foreach(
    Files::get_files_in_dir(self::CACHE_DIR) as $file) {
                    
    $cache[] = "CACHE FILE: " $file;
                }
                
    dump($cache);
            }
        }
    }
    En ese mismo fichero, modificar el valor de la constante CACHE_DIR por la ruta absoluta desde el root de nuestro proyecto, en la que necesitamos que estén los archivos de caché generados. Dicha ruta debe existir, si no existe, la tenemos que crea manualmente, en el script viene por defecto app/.cache/

    Cómo usarlo:

    De una forma sencilla, un uso sería el siguiente:
    PHP:
    # Instanciar el modelo
    $cache = new Model\Cache;
    # Crear el fichero de caché con el contenido que queremos tenga
    # Cada vez que hacemos esto, si el fichero ya existe, se sobreescribe TODO su contenido
    $cache->set('mi_archivo_de_cache',time());
    # Obtenemos el contenido de ese caché
    dump($cache->get('mi_archivo_de_cache'));
    Si al utilizar get() no existe el fichero de caché, obtendremos NULL.
    Si al utilizar set() ya existe el fichero de caché, será sobreescrito TODO su contenido.

    Si activamos el DEBUG y vamos a algún punto que ocupe el caché, vamos a ver un dump de TODOS los ficheros generados por el caché.

    Este mini sistema de caché nos puede servir para muchas cosas, un ejemplo y al menos para lo cual yo lo he creado, si tenemos que hacer constantemente peticiones a una API la cual nos limita diariamente, o cada X tiempo las peticiones, realizamos las peticiones y las almacenamos en caché, además de almacenar en caché también el tiempo de caducidad del mismo.

    Pueden usarse como "sesiones" globales para TODOS los que accedan a la aplicación, o como una micro base de datos (pero si necesitamos una base de datos, es mejor usarla).
     
    Última edición: 6 Oct 2017
    A kriollo le gusta esto.

Compartir esta página