Seditio Source
Root |
./othercms/dle15_0/upload/engine/classes/redis.class.php
<?php
/*
=====================================================
 DataLife Engine - by SoftNews Media Group
-----------------------------------------------------
 http://dle-news.ru/
-----------------------------------------------------
 Copyright (c) 2004-2021 SoftNews Media Group
=====================================================
 This code is protected by copyright
=====================================================
 File: redis.class.php
-----------------------------------------------------
 Use: redis class
=====================================================
*/

if( !defined( 'DATALIFEENGINE' ) ) {
   
header( "HTTP/1.1 403 Forbidden" );
   
header ( 'Location: ../../' );
    die(
"Hacking attempt!" );
}

class
dle_fastcache
{
    protected
$server = null;
    protected
$suite_key = null;
    protected
$max_age = null;
    public
$connection = null;
   
    public function
__construct( $config ) {
       
       
$this->suite_key = md5( DBNAME . PREFIX . SECURE_AUTH_KEY ).'_';
       
       
$this->server = $this->connect();
       
        if(
$this->connection !== -1 ) {
           
           
$redis_server = explode(":", $config['memcache_server']);
           
$this->connection = 1;

            if (
count($redis_server) == 2 ) {

                try {
                   
                    if( !
$this->server->connect( trim($redis_server[0]), trim($redis_server[1]) ) ) {
                       
$this->connection = 0;
                    }
                   
                } catch (
Exception $e) {
                   
                   
$this->connection = 0;
           
                }
           
            } else {

                try {
                   
                    if( !
$this->server->connect(trim($redis_server[0])) ) {
                       
$this->connection = 0;
                    }
                   
                } catch (
Exception $e) {
                   
                   
$this->connection = 0;
           
                }
               
            }
           
           
$auth = array();
           
            if(
$config['redis_user'] ) $auth['user'] = $config['redis_user'];
            if(
$config['redis_pass'] ) $auth['pass'] = $config['redis_pass'];

            if(
count($auth) ) {
                try {
                   
                    if( !
$this->server->auth($auth) ) {
                       
$this->connection = -2;
                    }
                   
                } catch (
Exception $e) {
                   
                   
$this->connection = -2;
           
                }
            }
       
            if(
$this->connection > 0) {
               
                try {
                   
                    if( !
$this->server->ping() ){
                       
$this->connection = 0;
                    }
                   
                } catch (
Exception $e) {
                   
                   
$this->connection = 0;
           
                }    
            }
       
        }
       
        if (
$config['clear_cache'] ) $this->max_age = $config['clear_cache'] * 60; else $this->max_age = 86400;

    }
   
    protected function
connect() {
       
        if(
class_exists( 'Redis' ) ) {
           
            return new
Redis();
       
        } else {
           
           
$this->connection = -1;
           
        }
       
    }
   
    public function
get( $key ) {
       
        if(
$this->connection < 1 ) return false;

        return
$this->server->get($this->suite_key.$key);
       
    }

    public function
set($key, $value) {
       
        if(
$this->connection < 1 ) return false;
       
       
$this->server->setEx($this->suite_key.$key, $this->max_age, $value);
       
        return
true;
       
    }
   
    public function
clear( $cache_areas = false ) {
       
        if(
$this->connection < 1 ) return false;
       
        if (
$cache_areas ) {
            if(!
is_array($cache_areas)) {
               
$cache_areas = array($cache_areas);
            }
        }
       
        if(
$cache_areas ) {
               
            foreach(
$cache_areas as $cache_area){
           
               
$allKeys = $this->server->keys($this->suite_key.$cache_area.'*');

                if(
is_array($allKeys) AND count($allKeys)) {
                    foreach (
$allKeys as $key) {
                       
$this->server->del($key);
                    }
                }

            }
           
        } else {
           
           
$this->_clear_all();
           
        }
       
        return
true;
       
    }
   
    protected function
_clear_all() {
       
        if(
$this->connection < 1 ) return false;
       
       
$allKeys = $this->server->keys($this->suite_key.'*');

        if(
is_array($allKeys) AND count($allKeys)) {
            foreach (
$allKeys as $key) {
               
$this->server->del($key);
            }
        }
       
        return
true;
       
    }
   
   
    public function
__destruct() {
       
        if(
$this->connection < 1 ) return;
       
        if(
$this->server ) {
           
$this->server->close();
        }
    }
   
}

?>