[Incomplete] Memcached Element and ElementList auto version control [placeholder]

Source: Internet
Author: User

This is my 1st version, maybe I can use getMulti and setMulti refactor it (optimized ).

 

class CacheUtils {    const CACHE_MAX_VERSION = 10;    private $memcache;    private static $instance;    private function __construct() {        $this->memcache = new Memcache();        $this->memcache->connect('127.0.0.1', 11211) or die('Can not connect to memcached server.');    }    public static function getInstance() {        if(self::$instance == null) {            self::$instance = new CacheUtils();        }        return self::$instance;    }    public function addElementVersion($type) {        $key = 'Element_Version:'.$type;        $ver = $this->memcache->increment($key);        if ($ver == false) {            $ver = $this->memcache->set($key, 0);            $ver = $this->memcache->increment($key);        }        else if ($ver > self::CACHE_MAX_VERSION) {            // flush all! keep data correct            $this->memcache->flush();        }        return $ver;    }    public function getElementVersion($type) {        $key = 'Element_Version:'.$type;        return $this->memcache->get($key);    }    public function addElement($elem) {        $key = 'Element:'.$elem->type.':'.$elem->id;        $retE = $this->memcache->set($key, $elem);        $retV = $this->addElementVersion($elem->type);        return $retE && $retV;    }    public function getElement($type, $id) {        $key = 'Element:'.$type.':'.$id;        return $this->memcache->get($key);    }    public function getElementListVersion($type, $sql) {        $key = 'Element_List_Version:'.$type.':'.$sql;        return $this->memcache->get($key);    }    public function addElementList($type, $list, $sql = '') {        $keyList = 'Element_List:'.$type.':'.$sql;        $keyVersion = 'Element_List_Version:'.$type.':'.$sql;        $ver = $this->getElementVersion($type);        $retL = $this->memcache->set($keyList, $list);        $retV = $this->memcache->set($keyVersion, $ver);        return $retL && $retV;    }    public function getElementList($type, $sql = '') {        $keyList = 'Element_List:'.$type.':'.$sql;        $elementVersion = $this->getElementVersion($type);        $elementListVersion = $this->getElementListVersion($type, $sql);        if ($elementListVersion != $elementVersion)            return false;        else            return $this->memcache->get($keyList);    }}

 

Test Case:

 

<?phprequire_once 'PHPUnit/Framework.php';require_once dirname(__FILE__).'/../CacheUtils.php';class Person {    public $id;    public $name;    public $age;    public $createTime;    public $type;    function __construct($id, $name, $age) {        $this->id = $id;        $this->name = $name;        $this->age = $age;        $this->type = get_class($this);        $this->createTime = time();    }}/** * Test class for CacheFacade. * Generated by PHPUnit on 2010-03-28 at 04:07:43. */class CacheUtilsTest extends PHPUnit_Framework_TestCase {    /**     * testAddElement     */    public function testAddAndGetElement() {        $cacheUtils = CacheUtils::getInstance();        $person = new Person(101,'Linx', 29);        $this->assertEquals(true, $cacheUtils->addElement($person));        $personGet = $cacheUtils->getElement('Person', 101);        $this->assertEquals('Linx', $personGet->name);        var_dump($personGet);    }    public function testAddAndGetElementList() {        $cacheUtils = CacheUtils::getInstance();        $person1 = new Person(101,'Linx1', 29);        $person2 = new Person(102,'Linx2', 30);        $list = array($person1, $person2);        $this->assertEquals(true, $cacheUtils->addElementList('Person', $list));        $listGet = $cacheUtils->getElementList('Person');        $this->assertEquals(2, count($listGet));        $this->assertEquals('Linx1', $listGet[0]->name);        var_dump($listGet);    }    public function testAddAndGetElementListExpired() {        $cacheUtils = CacheUtils::getInstance();        $person1 = new Person(101,'Linx1', 29);        $person2 = new Person(102,'Linx2', 30);        $list = array($person1, $person2);        $this->assertEquals(true, $cacheUtils->addElementList('Person', $list));        // Person v2        $this->assertEquals(true, $cacheUtils->addElement($person1));        // v1 is expired        $listGet = $cacheUtils->getElementList('Person');        $this->assertEquals(false, $listGet);        var_dump($listGet);    }}?>

 

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.