PHP Memcached + APC + 文件缓存封装实现代码
2015-01-24信息快讯网
PHP Memcached + APC + 文件缓存封装实现代码,需要的朋友可以参考下。
使用方法:Memcached
$cache = new Cache_MemCache(); $cache->addServer('www1'); $cache->addServer('www2',11211,20); // this server has double the memory, and gets double the weight $cache->addServer('www3',11211); // Store some data in the cache for 10 minutes $cache->store('my_key','foobar',600); // Get it out of the cache again echo($cache->fetch('my_key'));
文件缓存
$cache = new Cache_File(); $key = 'getUsers:selectAll'; // check if the data is not in the cache already if (!$data = $cache->fetch($key)) { // assuming there is a database connection $result = mysql_query("SELECT * FROM users"); $data = array(); // fetching all the data and putting it in an array while($row = mysql_fetch_assoc($result)) { $data[] = $row; } // Storing the data in the cache for 10 minutes $cache->store($key,$data,600); }
下载: class_cache3.php
<?php abstract class Cache_Abstract { abstract function fetch($key); abstract function store($key, $data, $ttl); abstract function delete($key); } class Cache_APC extends Cache_Abstract { function fetch($key) { return apc_fetch($key); } function store($key, $data, $ttl) { return apc_store($key, $data, $ttl); } function delete($key) { return apc_delete($key); } } class Cache_MemCache extends Cache_Abstract { public $connection; function __construct() { $this->connection = new MemCache; } function store($key, $data, $ttl) { return $this->connection->set($key, $data, 0, $ttl); } function fetch($key) { return $this->connection->get($key); } function delete($key) { return $this->connection->delete($key); } function addServer($host, $port = 11211, $weight = 10) { $this->connection->addServer($host, $port, true, $weight); } } class Cache_File extends Cache_Abstract { function store($key, $data, $ttl) { $h = fopen($this->getFileName($key), 'a+'); if (!$h) throw new Exception('Could not write to cache'); flock($h, LOCK_EX); fseek($h, 0); ftruncate($h, 0); $data = serialize(array(time() + $ttl, $data)); if (fwrite($h, $data) === false) { throw new Exception('Could not write to cache'); } fclose($h); } function fetch($key) { $filename = $this->getFileName($key); if (!file_exists($filename)) return false; $h = fopen($filename, 'r'); if (!$h) return false; flock($h, LOCK_SH); $data = file_get_contents($filename); fclose($h); $data = @ unserialize($data); if (!$data) { unlink($filename); return false; } if (time() > $data[0]) { unlink($filename); return false; } return $data[1]; } function delete($key) { $filename = $this->getFileName($key); if (file_exists($filename)) { return unlink($filename); } else { return false; } } private function getFileName($key) { return '/tmp/s_cache' . md5($key); } } ?>
php中用foreach来操作数组的代码
PHP 字符串正则替换函数preg_replace使用说明
php自定义函数call_user_func和call_user_func_array详解
php header Content-Type类型小结
Can't create/write to file 'C:\WINDOWS\TEMP\...MYSQL报错解决方法
php设计模式 Facade(外观模式)
php设计模式 Factory(工厂模式)
php设计模式 Chain Of Responsibility (职责链模式)
php判断输入不超过mysql的varchar字段的长度范围
使用php shell命令合并图片的代码
php的memcached客户端memcached
PHP模块 Memcached功能多于Memcache
php模块memcache和memcached区别分析
PHP 5.3新特性命名空间规则解析及高级功能
了解Joomla 这款来自国外的php网站管理系统
php 修改zen-cart下单和付款流程以防止漏单
PHP clearstatcache()函数详解
php 读取shell管道传输过来的内容
php 用checkbox一次性删除多条记录的方法
Search File Contents PHP 搜索目录文本内容的代码
php中理解print EOT分界符和echo EOT的用法区别小结
支持数组的ADDSLASHES的php函数
php htmlspecialchars加强版
同台服务器使用缓存APC效率高于Memcached的演示代码
用PHP ob_start()控制浏览器cache、生成html实现代码
php foreach 使用&(与运算符)引用赋值要注意的问题
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
Memcache 在PHP中的使用技巧