- 浏览: 175520 次
- 来自: 深圳
文章分类
最新评论
-
GGGGeek:
MySQL5.7.24varchar(65532)报错:107 ...
int(11)最大长度是多少,MySQL中varchar最大长度是多少?
转自:http://blog.csdn.net/heiyilvzhe/article/details/5979730
需求
1. 为数据库连接类读数据增加缓存处理,缓存方式可以为文件、Memory Cache
先只对Memory Cache实现
2. 对现有代码不进行大的改动,方便移植
3. 数据库连接类可扩充其他功能。
客户端调用
以前的方法
$result = $db_bbs->query_memcache($sql_str);
if(!$result) {
$result = $db_bbs->get_results($sql_str);
}
现在的只要一行$db_bbs->get_results($sql_str)。
如果写个文件缓存类的实现,生成文件缓存也像操作数据库一样都用$db_bbs->get_results($sql_str);
就是说操作memory cache、文件和真正的数据库没区别,对于调用的程序是透明的。
使用装饰模式可以将对memory cache、和文件的操作独立出来。
//----------------------------------------我是分割线-------------------------------------------------
旧的数据库连接类和支持缓存的连接类都实现以下接口
//存储查询写入接口
interface interface_DB {
public function get_results($sql, $oMethod = 'A');
public function query($sql);
public function get_row($sql , $oMethod = 'A');
public function get_var($sql);
}
支持不同缓存的连接类可以对get_results等方法进行各自的实现。
//----------------------------------------我是分割线-------------------------------------------------
数据库连接类使用工厂模式构造
下面是具体代码
<?php
require_once(DBSTORE."DB_Base.php");
class StoreFactory{
static function create($db,$classname="") {
if(!$classname){
return $db;
}
if (!class_exists($classname)) {
if(include_once(DBSTORE.$classname.'.php')){
return new $classname($db);
}else{
throw new Exception ($classname .'file not found');
}
}
}
}
?>
//----------------------------------------我是分割线-------------------------------------------------
支持缓存的数据库连接类
构造函数
public function __construct(DB_Base $db){ #初始化
$this->MEM_PRE_KEY = $_SERVER['SERVER_NAME'];
$this->db = $db;
$this->mem = new Memcache;
foreach ($this->IP as $key=>$value)
{
$this->mem->addServer($value,11211,false);
}
}
get_results 实现方法
public function get_results($sql,$oMethod="A"){
if (preg_match('/(^select)/sim', $sql)) {
$this->content = $this->get_content($sql);
if ($this->content){
$this->content =unserialize($this->content);
}
if(!$this->content) {
$this->content = $this->db->get_results($sql,$oMethod);
if ($this->content){
$this->set_content($sql,serialize($this->content),$this->limit_time);
}
}}else{
$this->get_results_nocache($sql,$oMethod);
}
return $this->content;
}
没有缓存或者缓存过期时调用的方法
protected function get_results_nocache($sql,$oMethod){
$this->content = $this->db->get_results($sql,$oMethod);
return $this->content;
}
//----------------------------------------我是分割线-------------------------------------------------
<?php
define('DBSTORE',"D:/projects/dp/decorator/store/");
require_once(DBSTORE."class_storefactory.php");
$db = StoreFactory::create($DB_localhost,"MemoryStore");
$db->limit_time=10;
$r_old = $DB_localhost->get_results("select phraseid,varname,text from phrase phraseid limit 0,1#yiduo ");
$r = $db->get_results("select phraseid,varname,text from phrase phraseid limit 0,1#yiduo ");
if($r_old==$r) {
print_r("OK");
}
?>
//----------------------------------------我是分割线-------------------------------------------------
利用装饰模式可以为数据库连接类扩展功能
如果你写个数据库日志类DB_LOG
可以这样建一个对象
$db = StoreFactory::create($DB_MemoryStore,"DB_LOG");
那$db 类就有了数据库日志记录功能,同时还有memory cache的功能
数据库日志记录功能本身不和DB_MemoryStore类耦合,DB_MemoryStore类的代码不会特别庞大
发表评论
-
PHP+MYSQL大小写问题
2014-11-21 11:33 1622[PHP]一、大小写敏感 1. 变量名区分大小写 所有变 ... -
php基础知识之 ---- echo、print_r、var_dump、调试输出
2014-04-29 18:19 0。。。。。。。。 -
php基础知识之 ---- 过滤、防sql注入
2014-04-29 18:13 0。。。。。。。 -
php基础知识之 ---- 错误处理、异常、错误日志
2014-04-29 18:11 0。。。。。。。。 -
php基础知识之 ---- include 、 require、常量应用
2014-04-29 18:09 0。。。。。。。 -
php基础知识之 ---- 发邮件
2014-04-29 18:05 0。。。。。。 -
php基础知识之 ---- 日期时间
2014-04-29 18:04 0。。。。。。。 -
php基础知识之 ---- 权限及web访问权限
2014-04-29 18:01 0。。。。。 -
php基础知识之 ---- 文件操作
2014-04-29 18:00 0。。。。。。。。。 -
php基础知识之 ---- Cookie
2014-04-29 17:58 0......... -
php基础知识之 ---- Session
2014-04-29 17:58 0..... -
php基础知识之 ---- 数组、foreach
2014-04-29 17:56 0...... -
php基础知识之 ---- 运算符、大数据取模/求余计算得到负数
2014-04-29 17:54 0在写代码的时候,发现对大数字进行%求余(取模)的时候,获得的 ... -
php基础知识之 ---- 三元运算、isset()、empty()
2014-04-29 17:51 0....... -
php基础知识之 ---- 字符串、变量、单引号、双引号
2014-04-29 17:44 0。。。。。。 -
带BOM的utf-8,用json_decode() 返回null的问题 --- 超过3个bom字符
2014-03-17 12:01 2664PHP中file_get_contents函数获取URL文件 ... -
Parse error: syntax error, unexpected '}'
2014-02-12 17:53 1589Parse error: syntax error, une ... -
超实用的PHP代码片段
2013-11-22 15:48 944一、查看邮件是否已被阅读当你在发送邮件时,你或许很想知道该 ... -
8 个PHP功能开发
2013-10-28 17:10 10991、传递任意数量的函数参数 我们在.NET或者JA ... -
三个超好用的PHP加密解密函数
2013-10-28 16:24 4205三个超好用的PHP加密解密函数,貌似是discuz里的…使用 ...
相关推荐
1. **工厂模式**:可以创建一个数据库连接工厂类,根据配置信息动态创建相应数据库的数据提供者实例,这样可以灵活地切换数据库。 2. **依赖注入框架**:结合IoC(Inversion of Control)容器,如Autofac、Unity或...
【内存缓存(Memory Cache)】在Java的内存管理中,内存缓存是一种优化策略,它的目的是减少对数据库或其他外部资源的访问,从而提高应用程序的性能。内存缓存利用计算机的内存来存储常用数据,使得数据获取速度比...
在讨论x86架构下的缓存(Cache Memory)时,首先我们需要理解什么是缓存以及它为何重要。缓存是一类快速存储设备,它位于处理器和主存(主内存)之间。缓存的主要功能是存储处理器经常使用的指令和数据。由于CPU执行...
还在测试,这几天完善一下
### Linux环境下通过PHP连接SQL Server数据库 在Linux环境中利用PHP连接SQL Server数据库是常见的操作需求之一,尤其是在处理跨平台数据库应用时。本文将详细介绍如何在Linux系统上配置环境,以便PHP能够成功连接到...
本主题将深入探讨三个关键层次的存储器:Cache、DRAM(动态随机存取内存)和磁盘。 首先,Cache是存储器系统中的最快部分,它的主要任务是减少CPU与主存之间的通信延迟。Cache的工作原理基于局部性原理,即程序运行...
### 处理器系统中的Cache-Memory #### 一、Cache的重要性及其作用 在现代处理器系统中,Cache-Memory(通常简称为Cache)扮演着至关重要的角色。它位于内存层次结构的顶端,紧邻处理器核心,其目的是通过缓存最近...
在SQL Server 2008中,数据库连接的设置是管理和使用数据库系统的关键步骤,它涉及到服务器配置、安全性、网络协议以及客户端连接等多方面。本文将深入探讨这些知识点,帮助用户更好地理解和操作SQL Server 2008的...
H2数据库是一个用Java编写的开源数据库管理系统,具有高性能、支持多种数据库模式的特点,适合用于测试和开发环境。 - **dialect**:指定Hibernate使用的方言类型,对于H2数据库,通常使用`org.hibernate.dialect....
根据提供的文件信息,我们可以...通过整合这些知识点,我们得到了对《Memory Systems - Cache, DRAM, Disk》一书的全面理解和细致解读,这是一本集技术深度和广度于一体,适用于不同读者层次的计算机内存系统权威著作。
数据库是信息时代的核心,它负责存储、管理和检索数据,为各种应用提供支持。数据库系统有很多种类型,每种都有其特定的特性和用途。本压缩包文件"数据库分类知识.zip"聚焦于数据库管理,并特别提及了MySQL,这是一...
cache memory, cache line, write through and write back. Average memory access time = Hit time + Miss rate x Miss penalty
3. 性能优化:考虑使用缓存技术(如Memory Cache)减少数据库访问,或者使用分页、延迟加载等策略提高性能。 4. 安全性:验证用户输入,防止SQL注入等安全问题。 通过这个实例,开发者可以学习到如何在ASP.NET 2010...
这通常通过创建一个内存中的数据库连接完成,使用SQL语句`ATTACH DATABASE 'memory:' AS mem_db`来实现。这样,所有的数据库操作都会在内存中进行,直到手动断开连接。 4. **内存数据库备份到本地** 内存数据库...
但是由于 .NET Core 2.0 暂时不支持 System.Runtime.Caching dll,导致 MemoryCache 相关代码无法使用。 解决方案是使用 .NET Core 2.0 的新 API 实现内存缓存功能,具体步骤如下: 1. 将旧代码导入项目中,并使用...
5. **错误处理与性能优化**:确保程序能够正确处理连接失败、查询错误等情况,同时考虑并发性能和资源管理,如连接池的使用,避免过多的数据库连接开销。 6. **安全性**:在局域网环境下,必须确保数据的安全性,...
本文主要探讨了缓存内存(Cache Memory)的相关知识,内容涵盖了缓存的基本概念、工作原理、组成结构、替换算法、指令缓存、一致性与一致性问题、层次结构、数据预取等多个方面。由于文件内容是扫描后的文字,可能...
总结来说,"Memory Systems - Cache, DRAM, Disk"这个资源涵盖了存储系统的核心组件,从高速缓存的效率提升到DRAM的内存管理和磁盘的持久化存储,深入探讨了这些技术的原理、优缺点以及它们如何协同工作以支持高效的...