Barry O'Donovan преди 13 години
родител
ревизия
195847b3de
променени са 2 файла, в които са добавени 163 реда и са изтрити 1 реда
  1. 153 0
      OSS/Cache/APC.php
  2. 10 1
      OSS/Cache/Basic.php

+ 153 - 0
OSS/Cache/APC.php

@@ -0,0 +1,153 @@
+<?php
+
+/*
+    Copyright (c) 2012, Open Source Solutions Limited, Dublin, Ireland
+    All rights reserved.
+
+    Contact: Barry O'Donovan - barry (at) opensolutions (dot) ie
+             http://www.opensolutions.ie/
+
+    This file is part of the OSS_SNMP package.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+        * Redistributions of source code must retain the above copyright
+          notice, this list of conditions and the following disclaimer.
+        * Redistributions in binary form must reproduce the above copyright
+          notice, this list of conditions and the following disclaimer in the
+          documentation and/or other materials provided with the distribution.
+        * Neither the name of Open Source Solutions Limited nor the
+          names of its contributors may be used to endorse or promote products
+          derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+namespace OSS\Cache;
+
+/**
+ * APC cache implementation
+ *
+ * @copyright Copyright (c) 2012, Open Source Solutions Limited, Dublin, Ireland
+ * @author Barry O'Donovan <barry@opensolutions.ie>
+ */
+class APC extends \OSS\Cache
+{
+    /**
+     * Default time to live for cache variables in seconds
+     * @var int Default time to live for cache variables in seconds  (defaults to 300s - 5 mins)
+     */
+    protected $_ttl = 300;
+
+    /**
+     * Prefix to use for caching items
+     * @var string Prefix to use for caching items
+     */
+    protected $_prefix = 'OSS_SNMP_';
+
+    /**
+     * Cache constructor.
+     *
+     * For basic cache, takes no parameters.
+     *
+     * @param int $ttl Set the default ttl
+     * @param string $prefix Set the default prefix for caching variable names
+     * @return \OSS\Cache\Basic An instance of the cache ($this) for  fluent interfaces
+     */
+    public function __construct( $ttl = 300, $prefix = 'OSS_SNMP_' )
+    {
+        // do we have APC?
+        if( !ini_get( 'apc.enabled' ) )
+            throw new \OSS\Exception( 'APC is not installed or not enabled' );
+
+        $this->_ttl    = $ttl;
+        $this->_prefix = $prefix;
+
+        return $this;
+    }
+
+
+
+    /**
+     * Load a named value from the cache (or null if not present)
+     *
+     * @param string $var The name of the value to load
+     * @return mixed|null The value from the cache or null
+     */
+    public function load( $var )
+    {
+        $success = true;
+        $val = apc_fetch( $this->_prefix . $var, $success );
+
+        if( $success === false )
+            return null;
+
+        return $val;
+    }
+
+
+
+    /**
+     * Save a named value to the cache
+     *
+     * @param string $var The name of the value to save
+     * @param mixed  $val The value to save
+     * @return mixed The value (as passed)
+     */
+    public function save( $var, $val  )
+    {
+        return $this->save( $var, $val, null )
+    }
+
+    /**
+     * Save a named value to the cache
+     *
+     * @param string $var The name of the value to save
+     * @param mixed  $val The value to save
+     * @param int $ttl The time to live of the variable if you want to override the default
+     * @return mixed The value (as passed)
+     */
+    public function save( $var, $val, $ttl = null )
+    {
+        if( $ttl === null )
+            $ttl = $this->_ttl;
+
+        if( apc_store( $this->_prefix . $var, $val, $ttl ) )
+            return $val;
+
+        return null;
+    }
+
+    /**
+     * Clear a named value from the cache
+     *
+     * @param string $var The name of the value to clear
+     */
+    public function clear( $var )
+    {
+        apc_delete( $this->_prefix . $var );
+    }
+
+
+    /**
+     * Clear all values from the cache
+     *
+     */
+    public function clearAll()
+    {
+        foreach ( new APCIterator( 'user', '/^' . $this->_prefix . '/') as $var )
+            apc_delete( $var );
+    }
+
+}
+

+ 10 - 1
OSS/Cache/Basic.php

@@ -51,9 +51,18 @@ class Basic extends \OSS\Cache
     protected $_cache;
 
 
+    /**
+     * Cache constructor.
+     *
+     * For basic cache, takes no parameters.
+     *
+     * @return \OSS\Cache\Basic An instance of the cache ($this) for  fluent interfaces
+     */
     public function __construct()
     {
         $_cache = array();
+
+        return $this;
     }
 
 
@@ -90,7 +99,7 @@ class Basic extends \OSS\Cache
      *
      * @param string $var The name of the value to clear
      */
-    public function clear( $va )
+    public function clear( $var )
     {
         if( isset( $this->_cache[ $var ] ) )
             unset( $this->_cache[ $var ] );