Вход Регистрация
Файл: vendor/laravel/framework/src/Illuminate/Cache/MemcachedStore.php
Строк: 227
<?php

namespace IlluminateCache;

use 
IlluminateContractsCacheLockProvider;
use 
IlluminateSupportInteractsWithTime;
use 
Memcached;
use 
ReflectionMethod;

class 
MemcachedStore extends TaggableStore implements LockProvider
{
    use 
InteractsWithTime;

    
/**
     * The Memcached instance.
     *
     * @var Memcached
     */
    
protected $memcached;

    
/**
     * A string that should be prepended to keys.
     *
     * @var string
     */
    
protected $prefix;

    
/**
     * Indicates whether we are using Memcached version >= 3.0.0.
     *
     * @var bool
     */
    
protected $onVersionThree;

    
/**
     * Create a new Memcached store.
     *
     * @param  Memcached  $memcached
     * @param  string  $prefix
     * @return void
     */
    
public function __construct($memcached$prefix '')
    {
        
$this->setPrefix($prefix);
        
$this->memcached $memcached;

        
$this->onVersionThree = (new ReflectionMethod('Memcached''getMulti'))
                            ->
getNumberOfParameters() == 2;
    }

    
/**
     * Retrieve an item from the cache by key.
     *
     * @param  string  $key
     * @return mixed
     */
    
public function get($key)
    {
        
$value $this->memcached->get($this->prefix.$key);

        if (
$this->memcached->getResultCode() == 0) {
            return 
$value;
        }
    }

    
/**
     * Retrieve multiple items from the cache by key.
     *
     * Items not found in the cache will have a null value.
     *
     * @param  array  $keys
     * @return array
     */
    
public function many(array $keys)
    {
        
$prefixedKeys array_map(function ($key) {
            return 
$this->prefix.$key;
        }, 
$keys);

        if (
$this->onVersionThree) {
            
$values $this->memcached->getMulti($prefixedKeysMemcached::GET_PRESERVE_ORDER);
        } else {
            
$null null;

            
$values $this->memcached->getMulti($prefixedKeys$nullMemcached::GET_PRESERVE_ORDER);
        }

        if (
$this->memcached->getResultCode() != 0) {
            return 
array_fill_keys($keysnull);
        }

        return 
array_combine($keys$values);
    }

    
/**
     * Store an item in the cache for a given number of seconds.
     *
     * @param  string  $key
     * @param  mixed  $value
     * @param  int  $seconds
     * @return bool
     */
    
public function put($key$value$seconds)
    {
        return 
$this->memcached->set(
            
$this->prefix.$key$value$this->calculateExpiration($seconds)
        );
    }

    
/**
     * Store multiple items in the cache for a given number of seconds.
     *
     * @param  array  $values
     * @param  int  $seconds
     * @return bool
     */
    
public function putMany(array $values$seconds)
    {
        
$prefixedValues = [];

        foreach (
$values as $key => $value) {
            
$prefixedValues[$this->prefix.$key] = $value;
        }

        return 
$this->memcached->setMulti(
            
$prefixedValues$this->calculateExpiration($seconds)
        );
    }

    
/**
     * Store an item in the cache if the key doesn't exist.
     *
     * @param  string  $key
     * @param  mixed  $value
     * @param  int  $seconds
     * @return bool
     */
    
public function add($key$value$seconds)
    {
        return 
$this->memcached->add(
            
$this->prefix.$key$value$this->calculateExpiration($seconds)
        );
    }

    
/**
     * Increment the value of an item in the cache.
     *
     * @param  string  $key
     * @param  mixed  $value
     * @return int|bool
     */
    
public function increment($key$value 1)
    {
        return 
$this->memcached->increment($this->prefix.$key$value);
    }

    
/**
     * Decrement the value of an item in the cache.
     *
     * @param  string  $key
     * @param  mixed  $value
     * @return int|bool
     */
    
public function decrement($key$value 1)
    {
        return 
$this->memcached->decrement($this->prefix.$key$value);
    }

    
/**
     * Store an item in the cache indefinitely.
     *
     * @param  string  $key
     * @param  mixed  $value
     * @return bool
     */
    
public function forever($key$value)
    {
        return 
$this->put($key$value0);
    }

    
/**
     * Get a lock instance.
     *
     * @param  string  $name
     * @param  int  $seconds
     * @param  string|null  $owner
     * @return IlluminateContractsCacheLock
     */
    
public function lock($name$seconds 0$owner null)
    {
        return new 
MemcachedLock($this->memcached$this->prefix.$name$seconds$owner);
    }

    
/**
     * Restore a lock instance using the owner identifier.
     *
     * @param  string  $name
     * @param  string  $owner
     * @return IlluminateContractsCacheLock
     */
    
public function restoreLock($name$owner)
    {
        return 
$this->lock($name0$owner);
    }

    
/**
     * Remove an item from the cache.
     *
     * @param  string  $key
     * @return bool
     */
    
public function forget($key)
    {
        return 
$this->memcached->delete($this->prefix.$key);
    }

    
/**
     * Remove all items from the cache.
     *
     * @return bool
     */
    
public function flush()
    {
        return 
$this->memcached->flush();
    }

    
/**
     * Get the expiration time of the key.
     *
     * @param  int  $seconds
     * @return int
     */
    
protected function calculateExpiration($seconds)
    {
        return 
$this->toTimestamp($seconds);
    }

    
/**
     * Get the UNIX timestamp for the given number of seconds.
     *
     * @param  int  $seconds
     * @return int
     */
    
protected function toTimestamp($seconds)
    {
        return 
$seconds $this->availableAt($seconds) : 0;
    }

    
/**
     * Get the underlying Memcached connection.
     *
     * @return Memcached
     */
    
public function getMemcached()
    {
        return 
$this->memcached;
    }

    
/**
     * Get the cache key prefix.
     *
     * @return string
     */
    
public function getPrefix()
    {
        return 
$this->prefix;
    }

    
/**
     * Set the cache key prefix.
     *
     * @param  string  $prefix
     * @return void
     */
    
public function setPrefix($prefix)
    {
        
$this->prefix = ! empty($prefix) ? $prefix.':' '';
    }
}
Онлайн: 0
Реклама