在web开发中,可以通过文件缓存,大大缓解数据库的压力。 如下代码是php中使用文件缓存的例子。
CacheLayer.php - class CacheLayer{
- protected $root = "";
- protected $cache = "";
- protected $key = "";
- protected $life = 0;
- public function __construct($key, $root = "/cachelayer"){
- $this->root = $_SERVER["DOCUMENT_ROOT"].$root;
- $this->key = $key;
- }
- public function expired($life_span){
- $this->life = $life_span;
- $file = $this->root."/".$this->key.".cachelayer";
- if(is_file($file)){
- $mtime = filemtime($file);
- return (time() >= ($mtime + $this->life));
- }else{
- return true;
- }
- }
- public function put($content){
- $file = $this->root."/".$this->key.".cachelayer";
- if(!is_dir(dirname($this->root))){
- return false;
- }
- $this->delete();
- $content = json_encode($content);
- return (bool)file_put_contents($file, $content);
- }
- public function get(){
- $file = $this->root."/".$this->key.".cachelayer";
- if(is_file($file)){
- return json_decode(file_get_contents($file), true);
- }
- return array();
- }
- public function delete(){
- $file = $this->root."/".$this->key.".cachelayer";
- if(is_file($file)){
- unlink($file);
- return true;
- }
- return false;
- }
- }
example.php - // Load the cachelayer and the database connection (db connection is optional)
- require_once "CacheLayer.php";
- require_once "db_connection.php";
- // Create a instance of the cachelayer
- $cl_nav = new CacheLayer("navigation");
- // Check to see if the cache is expired (60 * 10 = 10 minutes)
- if($cl_nav->expired(60 * 10)){
- echo "Cache doesn't exist or is expired. Rebuilding...
"; - // if the cache is expired rebuild it
- $result = mysql_query("select id, title from navigation");
- $new_cache = array();
- while($row = mysql_fetch_assoc($result)){
- $new_cache[] = $row;
- }
- // Save the array into the cache
- $cl_nav->put($new_cache);
- }
- echo "Loading from cache...
"; - // Get the cache
- $cache = $cl_nav->get();
- // Display the cache
- foreach($cache as $row){
- $id = $row["id"];
- $title = $row["title"];
- echo "$title
"; - }
|