Вход Регистрация
Файл: concrete5.7.5.6/concrete/vendor/tedivm/stash/src/Stash/Driver/Sub/Memcache.php
Строк: 88
<?php

/*
 * This file is part of the Stash package.
 *
 * (c) Robert Hafner <tedivm@tedivm.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace StashDriverSub;

/**
 * @internal
 * @package Stash
 * @author  Robert Hafner <tedivm@tedivm.com>
 */
class Memcache
{
    
/**
     * @var Memcached
     */
    
protected $memcached;

    
/**
     * Constructs the Memcache subdriver.
     *
     * Takes an array of servers, with array containing another array with the server, port and weight.
     *
     * array(array( '127.0.0.1', 11211, 20), array( '192.168.10.12', 11213, 80), array( '192.168.10.12', 11211, 80));
     *
     * @param array $servers
     */
    
public function __construct($servers)
    {
        
$memcache = new Memcache();

        foreach (
$servers as $server) {
            
$host $server[0];
            
$port = isset($server[1]) ? $server[1] : 11211;
            
$weight = isset($server[2]) ? (int) $server[2] : null;

            if (
is_integer($weight)) {
                
$memcache->addServer($host$porttrue$weight);
            } else {
                
$memcache->addServer($host$port);
            }
        }

        
$this->memcached $memcache;
    }

    
/**
     * Stores the data in memcached.
     *
     * @param  string   $key
     * @param  mixed    $value
     * @param  null|int $expire
     * @return bool
     */
    
public function set($key$value$expire null)
    {
        if (isset(
$expire) && $expire time()) {
            return 
true;
        }

        return 
$this->memcached->set($key, array('data' => $value'expiration' => $expire), null$expire);
    }

    
/**
     * Retrieves the data from memcached.
     *
     * @param  string $key
     * @return mixed
     */
    
public function get($key)
    {
        return @
$this->memcached->get($key);
    }

    
/**
     * This function emulates the compare and swap functionality available in the other extension. This allows
     * that functionality to be used when possible and emulated without too much issue, but for obvious reasons
     * this shouldn't be counted on to be exact.
     *
     * @param  string $key
     * @param  mixed  $value
     * @return mixed
     */
    
public function cas($key$value)
    {
        if ((
$return = @$this->memcached->get($key)) !== false) {
            return 
$return;
        }

        
$this->memcached->set($key$value);

        return 
$value;
    }

    
/**
     * Increments the key and returns the new value.
     *
     * @param $key
     * @return int
     */
    
public function inc($key)
    {
        
$this->cas($key0);

        return 
$this->memcached->increment($key);
    }

    
/**
     * Flushes memcached.
     */
    
public function flush()
    {
        
$this->memcached->flush();
    }

    
/**
     * Returns true if the Memcache extension is installed.
     *
     * @return bool
     */
    
public static function isAvailable()
    {
        return 
class_exists('Memcache'false);
    }
}
Онлайн: 0
Реклама