Location: PHPKode > scripts > SharedMemory > sharedmemory/SharedMemory.class.php
<?php
/*
*Author:      beiliwenxiao
*Name:        eAccelerator-based solutions for shared memory.
*Version:     1.0
*Date:        2009-08-31
*Description:
*Can only be applied to a single primary key table.
*You must have eAccelerator.
*It can be reduce the database pressure and Ensure data accuracy and synchronization.
*You can be applied to High interactive webgame.
*/

/*
*Example:
*According to different sequential access 
*
*test_get.php
*test_show.php
*test_del.php
*
*You can understand it how to work.
*And change the databese code with youself's,then you can use this at one page.
*/

class SharedMemory
{
	//Your table primary key value 
	var $id;

	//Your class name
	var $classname;
	
	//Your function name
    var $funname;

	//Your Data's id list
	var $idlist;

	//Need to remove a list of id
	var $idlist_del;
		
	//How many of each data processing
	var $m = 1000;

	//The number of seconds to suspend
	var $n = 1;

	function __construct($classname,$funname,$id='')
	{
		$this->id=$id;
		$this->classname=$classname;
		$this->funname=$funname;
		$this->idlist = eaccelerator_get($this->classname.'_'.$this->funname.'_idlist');
	}

	function setData($data)
	{
		if ($this->id<>0 and $this->id<>'')
		{
			eaccelerator_lock($this->classname.'_'.$this->funname.'_'.$this->id);
			eaccelerator_put($this->classname.'_'.$this->funname.'_'.$this->id,$data,'0');
			eaccelerator_unlock($this->classname.'_'.$this->funname.'_'.$this->id);
			
			if (!$this->idlist)
			{	
				$this->idlist[0]=$this->id;
				
				eaccelerator_lock($this->classname.'_'.$this->funname.'_idlist');
				eaccelerator_put($this->classname.'_'.$this->funname.'_idlist',$this->idlist,'0');
				eaccelerator_unlock($this->classname.'_'.$this->funname.'_idlist');
			}
			else
			{	
				if(!in_array($this->id,$this->idlist))
				{	
					array_push($this->idlist, $this->id);
					eaccelerator_lock($this->classname.'_'.$this->funname.'_idlist');
					eaccelerator_put($this->classname.'_'.$this->funname.'_idlist',$this->idlist,'0');
					eaccelerator_unlock($this->classname.'_'.$this->funname.'_idlist');
				}
			}

		}
	}

	function getData($id='')
	{	
		if ($id<>'')
		{
			$data = eaccelerator_get($this->classname.'_'.$this->funname.'_'.$id);
			if (!$data)
			{		
				$data = call_user_func(array($this->classname, $this->funname),$id);
				$this->setData($data);
			}
		}
		else
		{
			$data = eaccelerator_get($this->classname.'_'.$this->funname.'_'.$this->id);
			if (!$data)
			{	
				/*
				echo $this->classname;
				echo $this->funname;
				echo $this->id;
				exit();
				*/
			
				$data =	call_user_func(array($this->classname, $this->funname),$this->id);
				$this->setData($data);
			}
		}

		return $data;

	}

	function upData($data)
	{
		eaccelerator_lock($this->classname.'_'.$this->funname.'_'.$this->id);
		eaccelerator_put($this->classname.'_'.$this->funname.'_'.$this->id,$data,'0');
		eaccelerator_unlock($this->classname.'_'.$this->funname.'_'.$this->id);
	}
	
	function delData()
	{	
		eaccelerator_lock($this->classname.'_'.$this->funname.'_'.$this->id);
		eaccelerator_rm($this->classname.'_'.$this->funname.'_'.$this->id);
		eaccelerator_unlock($this->classname.'_'.$this->funname.'_'.$this->id);
		call_user_func(array($this->classname, $this->funname.'_del'),$this->id);	

	}

	/*
	*
	*You need set regular implementation of the syncData();
	*/
	function syncData()
	{		
		if ($this->idlist)
		{
			$c=count($this->idlist);
			for($i=0;$i<$c;$i++)
			{
				$data=$this->getData($this->idlist[$i]);

				call_user_func(array($this->classname, $this->funname.'_updata'),$this->idlist[$i],$data);

				if ($i%$this->m == 0 )
				{
					sleep($this->n);
				}
				
			}

			eaccelerator_lock($this->classname.'_'.$this->funname.'_idlist');
			eaccelerator_rm($this->classname.'_'.$this->funname.'_idlist');
			eaccelerator_unlock($this->classname.'_'.$this->funname.'_idlist');
		}

	}

}
?>
Return current item: SharedMemory