2013-05-29 25 views
12

È possibile memorizzare oggetti complessi tra cui variabili/funzioni pubbliche/statiche auto-definite/ereditate?Memcached può memorizzare oggetti complessi?

sto parlando Memcached (http://memcached.org/)

+0

Solo se sono serializzato; e la classe deve essere stata inclusa/definita prima di poter annullare la serializzazione di nuovo –

+0

Se si desidera serializzare chiusure, è necessario qualcosa come https://github.com/jeremeamia/super_closure –

risposta

11

uso http://php.net/manual/en/function.serialize.php

<?php 

// connect memcache 
$memcache_obj = new Memcache; 
$memcache_obj->connect('localhost', 11211); 

// simple example class 
class MyClass { 
    private $var = 'default'; 

    public function __construct($var = null) { 
     if ($var) { 
      $this->setVar($var); 
     } 
    } 

    public function getVar() { 
     return $this->var; 
    } 

    public function setVar($var) { 
     $this->var = $var; 
    } 
} 

$obj1 = new MyClass(); 
$obj2 = new MyClass('test2'); 
$obj3 = new MyClass(); 
$obj3->setVar('test3'); 

// dump the values using the method getVar 
var_dump($obj1->getVar(), $obj2->getVar(), $obj3->getVar()); 

// store objects serialized in memcache, set MEMCACHE_COMPRESSED as flag so it takes less space in memory 
$memcache_obj->set('key1', serialize($obj1), MEMCACHE_COMPRESSED); 
$memcache_obj->set('key2', serialize($obj2), MEMCACHE_COMPRESSED); 
$memcache_obj->set('key3', serialize($obj3), MEMCACHE_COMPRESSED); 

// unset the objects to prove it ;-) 
unset($obj1, $obj2, $obj3); 

// get the objects from memcache and unserialze 
// IMPORTANT: THE CLASS NEEEDS TO EXISTS! 
// So if you have MyClass in some other file and include it, it has to be included at this point 
// If you have an autoloader then it will work easily ofcourse :-) 
$obj1 = unserialize($memcache_obj->get('key1')); 
$obj2 = unserialize($memcache_obj->get('key2')); 
$obj3 = unserialize($memcache_obj->get('key3')); 

// dump the values using the method getVar 
var_dump($obj1->getVar(), $obj2->getVar(), $obj3->getVar()); 

?> 
Problemi correlati