代码1,操作memcache服务器。
<?php class mem{ private static $conn; public function mem($host='127.0.0.1',$port=11211) { $conn = new Memcache; $conn->pconnect($host, $port); } public function get($key) { return $this->conn->get($key); } public function set($key,$value,$expire=259200) { return $this->conn->set($key,$value,0,$expire); } public function del($key) { return $this->conn->delete($key); } public function clearAll() { return $this->conn->flush(); } } ?>
代码2,从数据库取数据,如果取不到,则自动加载设定的表到内存,假设,每个表的主键字段是id。
<?php //memcache缓存类 //by www.jb200.com require_once('mem.php'); require_once('common.fun.php'); class cache{ private static $mem; private static $fixedTables=array( "enemy", "equip", "soldier_skill" ); private static $fixedTablesHasCol2Search=array( "soldier"=>array("soldier_id") ); private $db; public function cache($host='127.0.0.1',$port=11211,&$db) { self::$mem = new mem($host,$port); $this->db=$db; } public function get($tb,$pkv) { $return = self::$mem->get($tb.'_'.$pkv); if(!$return) { $this->loadAll(); $return = self::$mem->get($tb.'_'.$pkv); } if(!$return) common::dolog('cache class get "'.$tb.'_'.$pkv.'" failed'); return $return; } public function getByCol($tb,$col,$kv) { $return = self::$mem->get($tb.'_'.$col.'_'.$kv); if(!$return) { $this->loadAll(); $return = self::$mem->get($tb.'_'.$col.'_'.$kv); } if(!$return) common::dolog('cache class getByCol "'.$tb.'_'.$col.'_'.$kv.'" failed'); return $return; } public function loadAll() { foreach(self::$fixedTables as $tb) { $rows=$this->db->getRows('select '.chr(42).' from '.$tb); $seachCol=array(); $searhColData=array(); if(isset(self::$fixedTablesHasCol2Search[$tb])) { $seachCol=self::$fixedTablesHasCol2Search[$tb]; } foreach($rows as $row) { self::$mem->set($tb.'_'.$row['id'],$row); if(!empty($seachCol)) { foreach($seachCol as $col) { $searhColData[$tb.'_'.$col.'_'.$row[$col]][]=$row; } } } foreach($searhColData as $k=>$v) { self::$mem->set($k,$v); } } } public function set($key,$value,$expire=259200) { return self::$mem->set($key,$value,0,$expire); } public function del($key) { return self::$mem->del($key); } } ?>