缓存在Web程序里必不可少,最常见的形式如下:
01 class Foo extends DAO
02 {
03 public function find_by_a()
04 {
05 $result = $this->cache->get('cache_a');
06
07 if (!$result) {
08 $result = $this->db->getAll('select ... from ... where a ...');
09
10 $this->cache->set('cache_a', $result);
11 }
12
13 return $result;
14 }
15
16 public function find_by_b()
17 {
18 $result = $this->cache->get('cache_b');
19
20 if (!$result) {
21 $result = $this->db->getAll('select ... from ... where b ...');
22
23 $this->cache->set('cache_b', $result);
24 }
25
26 return $result;
27 }
28 }
这个代码很平常,实际情况中,多数人差不多都是这么写代码,先用某个键在缓存里取一下,如果没有就从数据库里实际查询一次,并且把结果缓存起来,这样的代码虽然不够健壮(没有捕捉可能存在的异常),不过本身并没有太大问题,但是若干个方法叠加起来,我们就能明显的感受到坏味道:重复!不说废话了哦,直接给出解决方案:
01 abstract class DAO
02 {
03 public function getCache($key, $closure)
04 {
05 $result = $this->cache->get($key);
06
07 if (!$result) {
08 $result = $closure();
09
10 $this->cache->set($key, $result);
11 }
12
13 return $result;
14 }
15 }
16
17 class Foo extends DAO
18 {
19 public function find_by_a()
20 {
21 return $this->getCache('cache_a', function() {
22 return $this->db->getAll('select ... from ... where a ...');
23 });
24 }
25
26 public function find_by_b()
27 {
28 return $this->getCache('cache_b', function() {
29 return $this->db->getAll('select ... from ... where b ...');
30 });
31 }
32 }
代码有点简陋,通过把非公共代码提取成一个closure,传递给getCache方法,从而消除了重复的坏味道。
分享到:
相关推荐
客户端代码可以检查缓存并处理请求: ```javascript const cachedResponse = localStorage.getItem('resource_key'); if (cachedResponse) { const etag = cachedResponse.etag; fetchResourceWithETag(etag); } ...
缓存数据的代码html,仅供参考............................................
vc 图形闪烁 双缓存代码vc 图形闪烁 双缓存代码vc 图形闪烁 双缓存代码vc 图形闪烁 双缓存代码vc 图形闪烁 双缓存代码vc 图形闪烁 双缓存代码vc 图形闪烁 双缓存代码vc 图形闪烁 双缓存代码vc 图形闪烁 双缓存代码vc...
进行配置,它能够缓存编译后的PHP代码,减少每次页面请求的编译时间,大幅提高PHP应用性能。 八、缓存有效时间与更新 缓存数据需要设置有效时间,超过这个时间后缓存失效,需要重新生成或更新缓存。时间变更判断是...
### PHP Memcached 高级缓存应用代码解析 #### Memcached类方法详解 在PHP中,`Memcache`类提供了与Memcached服务器交互的接口。下面,我们将详细解释部分关键方法及其用法: 1. **`Memcache::add()`** - 如果键...
可以缓存文字信息跟图片信息,本来想0积分的,但是最少需要1积分
win7缓存清理代码,使win7能够快速自动清理干净,包含剪贴板
一个php内存缓存Memcached类代码,构造方法,用于添加服务器并创建memcahced对象,获取memcached对象,检查mem是否连接成功,向memcache中添加数据,获取memcahce中保存的数据,删除和同一个表相关的所有缓存。
个简单至极的PHP缓存类代码,缓存的应用对于php项目的开发来说尤为重要 使用说明: 1、实例化 $cache = new Cache(); 2、设置缓存时间和缓存目录 $cache = new Cache(60, '/any_other_path/'); 第一个参数是缓存...
上述代码中,`ob_start()`函数用于创建一个新的PHP缓存。`ob_flush()`函数则负责将当前缓存中的数据写入到上级缓存(这里是Apache缓存),而`flush()`函数则用于将Apache缓存中的数据发送到浏览器。通过这种方式,...
用于android清除缓存功能
本文将详细介绍如何通过PHP代码来实现页面缓存的禁止。 #### 一、基本概念 1. **缓存**:缓存是指存储最近或频繁访问的数据副本的过程,目的是减少响应时间并降低服务器负载。 2. **页面缓存**:特定于Web应用,指...
在Android开发中,图片加载是常见且重要的任务。由于网络速度和设备性能的限制,合理的图片缓存机制显得尤为重要。...通过`ImageCache.zip`文件,你可以获取到实现这些功能的代码示例,进一步理解并实践这些技术。
在Java开发中,Redis缓存代码是利用Java客户端与Redis服务器进行交互,实现数据快速读取和写入的关键部分。下面我们将深入探讨Redis缓存的相关知识点。 1. **Jedis**:Java中广泛使用的Redis客户端库是Jedis。它...
一个php内存缓存Memcached类代码,构造方法,用于添加服务器并创建memcahced对象,获取memcached对象,检查mem是否连接成功,向memcache中添加数据,获取memcahce中保存的数据,删除和同一个表相关的所有缓存。
### 详解PHP缓存技术在网站开发中的应用 在当今高度依赖互联网的时代,网站的响应速度和用户体验成为了吸引用户的关键因素。随着网站流量的增加,数据库的查询压力也随之增大,这不仅影响了网站的性能,还可能导致...
根据给定的信息,我们可以深入探讨 PHP 缓存技术以及如何使用抽象类来设计缓存系统。此外,还将探讨 APC 缓存的具体实现。 ### 一、缓存抽象类概述 在给定的代码中,定义了一个名为 `Cache_Abstract` 的抽象类。这...
乒乓缓存(Ping-Pong Buffer)是一种在计算机编程中用于优化数据传输和处理的技术,尤其在实时系统或者需要高效内存管理的场景下被广泛应用。它通过利用两个或多个交替使用的缓冲区来避免数据读写过程中的等待时间,...
这段代码中,`CacheExecute` 方法会在缓存目录中查找与查询语句对应的缓存文件,如果存在则直接使用该文件中的数据,否则执行查询并将结果保存到缓存文件中。 #### 四、Adodb缓存机制 Adodb是一个流行的数据库抽象...