我最近为客户做一个导入功能,功能中有一个需求,客户中有一个媒体字段,导入后要根据导入客户的媒体,查出媒体的一些数据更新到这个客户的字段中。
当我做完后,测试导入功能没有问题,便交付了,过不多久,客户反映速度有点慢,在查原因,发现和查出媒体的一些数据有关,虽然sql语句执行时间很短,但是由于导入数据量很大,每一次都要执行,导致了时间延长了。
分析了原因后,我们想解决方案了,这个开发的人一看就知道了,就是‘缓存’,那具体使用什么技术呢,分析这个问题,可以发现:
1.导入的客户巨大,但是客户的媒体很多都是重复的,许多sql语句是重复执行的。
2.由于媒体的信息更新的,但是可以认定本次访问中相同媒体获得的数据相同,所以这次的缓存的有效时间只是本次连接时间。
3. 缓存的速度要尽可能的快。众所周知,不同的缓存的速度是不同的,本地内存>memcache>磁盘缓存。
而这三个特点,可以使用static变量来实现缓存。代码基本形式如下:
function updateFirstEndFromBatchtasks(...){
static $cache=array();
$val=$$cache[$key];
if(is_null($val)){
$val=.....//获取$val的值
$cache[$key]=$val;
}
}
下面说说static变量来实现缓存的优缺点吧:
优点:
速度快,效率高,实现简单。由于是PHP内部变量,是所有缓存中执行效率最高的。
缺点:
灵活性差,只在本次连接中有效,执行区域小,只在同一个函数中有效,无法跨函数运作(可以使用全局变量替代)。
static变量做缓存非常好用,而且耗费的资源不多,对于要查询数据库的,且在一次连接中可能执行多次的,不妨加上。虽然可能效果有限。
分享到:
相关推荐
### Java内存管理的小技巧 #### 一、合理使用Boolean封装 在Java开发中,Boolean类型在许多场景下是必不可少的,特别是在与数据库交互时。例如,在JDBC中,布尔值类型的set与get方法通常需要通过`Boolean`封装来...
### C#编程的小技巧 在本篇文章中,我们将探讨几个实用的C#编程技巧,旨在帮助开发者提升代码质量和效率。 #### 最小化窗口 在Windows应用程序中,有时我们需要控制窗体的状态,比如最小化窗口。这可以通过重写...
### 保持代码健壮性的小技巧:深入学习Java原理 #### 1. 字符串连接:性能与效率 在Java中,字符串连接是常见的操作,但不同的实现方式对性能的影响巨大。直接使用加号(`+`)进行字符串连接会在每次操作时创建新...
`static`变量在整个类的生命周期中只有一份副本,虽然可以共享,但容易成为内存泄漏的源头。除非必要,应优先考虑使用`final`修饰的类内私有常量,这样既能保持不变性,又可避免潜在的内存问题。 综上所述,Java...
- **绝对路径优于相对路径**:在`include`语句中使用绝对路径,可以减少PHP寻找文件所需的时间,提高加载速度。 ### 6. 时间戳获取 - **使用`$_SERVER['REQUEST_TIME']`代替`time()`**:获取脚本开始执行时间时,...
3. **文件缓存**: 对于较小的数据集或者简单的应用场景,可以考虑使用文件缓存机制。虽然不如内存缓存快速,但在资源有限的情况下也是一种有效的解决方案。 #### 二、优化代码编写方式 1. **字符串处理**: 使用单...
实例271 清理SESSION缓存提高网站访问的效率 358 第6章 图形图像处理 361 6.1 图像与统计 362 实例272 图形计数器 362 实例273 GD2图形计数器 363 实例274 通过图像显示投票统计结果 365 实例275 通过图像显示密码...
实例271 清理SESSION缓存提高网站访问的效率 358 第6章 图形图像处理 361 6.1 图像与统计 362 实例272 图形计数器 362 实例273 GD2图形计数器 363 实例274 通过图像显示投票统计结果 365 实例275 通过图像显示密码...
为了解决这个问题,我们需要清除WebBrowser控件中的Cookie缓存。下面将详细介绍如何在C#中实现这一功能。 首先,我们要了解Cookie的工作原理。Cookie是服务器发送到用户浏览器并存储在本地的小型文本文件,用于跟踪...
Javascript小技巧一箩筐 事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture(); event.srcElement.releaseCapture(); 事件按键 event.keyCode ...
在深入探讨Java语言中内存管理的技巧之前,我们先来明确一下Java内存管理的基本概念。Java内存管理主要涉及堆内存(Heap Memory)和非堆内存(Non-Heap Memory)。堆内存是应用程序的主要存储区域,用于存储对象实例...
以下就是针对Java内存管理的9个小技巧: 1. **避免使用`new Boolean()`**:创建新的`Boolean`对象会占用额外的内存,因为每个对象都有自己的内存开销。`Boolean`类提供了`TRUE`和`FALSE`两个静态常量,可以通过`...
14. **Integer与int的区别**:Integer是int的包装类,提供了更多功能,如自动装箱拆箱、缓存小数值等。int是原始数据类型,直接存储值,没有对象的概念。 15. **Math.round方法**:Math.round(11.5)等于12,Math....
栈中的变量访问速度快于堆中的对象,因此尽可能使用局部变量而非对象实例可以提高程序执行效率。 #### 6. 装箱与拆箱 装箱是指将基本数据类型转换为对应的包装类,而拆箱则是相反的过程。频繁地进行装箱和拆箱操作...
在 Unity 中,我们可以使用静态类型化(Static Typing)来代替动态类型化(Dynamic Typing),从而提高性能。 Unity 使用一种叫做类型推导(Type Inference)的技术,自动把 JavaScript 转化为静态类型代码...
在文件I/O操作方面,require/include_once每次被调用时都会打开目标文件,应尽量避免使用,或者使用绝对路径来解决PHP5.2/6.0中的问题。新版的APC缓存系统可以解决这个问题。 在代码编写时,不要调用不必要的函数。...
- **按数据类型的长度排序**:将结构体中的成员按照其类型长度由小到大排列,可以减少内存碎片,提高缓存利用率。 - **示例**:如果一个结构体包含多个成员,例如`int`、`double`、`char`等,应当考虑将`char`...
Java内存管理是Java编程中... - 避免过多使用`static`变量,除非必要,可以使用`final`常量代替。 通过理解和应用上述Java内存管理知识,可以有效提高程序性能,减少内存占用,避免内存溢出,确保程序的稳定性和效率。
4. **结构体操作**:在C#中处理结构体时,如果需要直接操作其内部的指针,可以使用`fixed`关键字来固定一个结构体实例的地址,以便在不安全的上下文中使用。 5. **内存管理**:使用`unsafe`代码块可以实现类似C/C++...