数据库缓存层

article/2025/10/6 9:35:55

一  常见的缓存形式 :

1.文件缓存 (为了避免I/O开销,尽量使用内存缓存)

2.内存缓存

 

二 为什么要使用缓存

缓存数据是为了让客户端很少甚至不访问数据库服务器进行的数据查询,高并发下,能最大程度降低对数据库服务器的访问压力

一般的数据请求:

用户请求->数据查询->连接数据库服务器并查询数据->将数据缓存起来(缓存方式: HTML , 内存 , [JSON, 序列化数据不做考虑])->显示给客户端

用户再次请求或者新用户访问->数据查询->直接从缓存中获取数据->显示给客户端

 

三 缓存需要考虑的方面

1.缓存方式的选择: 对I/O开销比较小的方式, 比如缓存到内存

2.缓存场景的选择: 一些不经常修改的数据适合做缓存

3. 缓存数据的实时性: 

4. 缓存数据的稳定性: 

 

四  Mysql的查询缓存

1.启用mysql查询缓存:

--(1) query_cache_type : 0代表使用查询缓存 1表示始终使用查询缓存 2表示按需使用查询缓存

--(2) 如果选择1也就是始终缓存时,如果某一条sql语句不想使用缓存,可以这样

select SQL_NO_CACHE * from student where condition;

--(3) 如果选择2也就是按需使用查询缓存时,可以这样

select SQL_CACHE *from student where condition;

2. query_cache_size 配置项

默认情况下,query_cache_size为0,也就是表示为查询缓存预留的内存为0,表示无法使用查询缓存

(1) 可以通过 set GLOBAL query_cache_size= 来临时设置

(2) 也可以在配置文件中,直接设置query_cache_size的大小

3. 查询缓存可以看做是SQL文本和查询结果的映射

第二次查询的sql和第一次查询的sql完全相同,则会使用缓存

4. 我们可以通过show status like 'Qcache_hits'; 命令来查看命中次数

5. 在mysql数据缓存中,除了sql语句改变会使缓存无法使用,当表的结构或数据发生改变时,查询缓存中的数据也不再有效

总结:如果写的频率较高,mysql查询缓存意义就不大,如果数据基本不发生改变,mysql查询缓存还是比较有用的

6.清理缓存

FLUSH QUERY CACHE; //清理查询里的缓存内存碎片

RESET QUERY CACHE; //从查询缓存中移出所有查询

FLUSH TABLES; //关闭所有打开的表,同时该操作将会清空查询缓存中的内容

 

五 使用Memcache 缓存查询数据

 

1.memcache的概念

 memcache是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问数据库的网站访问速度提升效果十分显著 。

 

2.memcache 的工作原理

Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度

 

3. memcache工作流程

先检查客户端的请求数据是否在memcached中,如有,直接把请求数据返回,不再对数据库进行任何操作;如果请求的数据不在memcached中,就去查数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份到memcached中

 

4.memcache的安装

如果没有以下memcache文件,点击链接下载

(1) 首先,获取memcached.exe以及msvcr71.dll(这是memcache的依赖文件),如图

 

 

(2) 在memcached所在目录的命令行下运行memcached.exe

(3)检查任务管理器, 验证memcached是否已经开始运行

如果任务进程出现这样的图标,说明memcached已经在运行了,到这里结束!

 

当然,这种运行方式使用上不是太方便,每次还要在命令行上运行,所以,有另一种方式让memcached运行而不用每次都开启cmd窗口,见下文

(2)  以管理员身份运行cmd,将memcached安装到服务上(将上面的第(2)步替换掉 )

(3) 查看服务中是否有memcached(将上面的第(3)步替换掉 )

将其启动即可

 

注意:如果想要从服务中卸载掉memcached,需要先将memcached服务停止,然后再命令行下输入如下命令即可卸载

 

5. 在php中操作memcache(需要安装memcache拓展,安拓展是一个php程序员最基础的东西,这里不赘述了)

(1) 连接memcache

 

$mem = new memcache();
$re=$mem->connect('localhost', 11211);
if($re){echo '连接memcache成功';
}else{echo '连接失败';
}

浏览器输出:连接memcache成功  证明连接memcache成功

 

 

(2) 现在,可以操作memcache数据库了

具体方法可以参考memcache文档 , memcached文档

(3) 使用远程协议进行连接memcache的几种方式

第一种:可以开启telnet,然后在cmd命令行模式下使用telnet远程连接memcache

第二种:使用putty(支持telnet的客户端)

第三种:  图形界面客户端

第四种: phpmemcache 服务器状态软件

第五种: memadmin php管理memcache的客户端 (推荐) 链接

6. memcache在项目中的具体应用 

 

六 使用redis缓存查询数据

 -----以后再补-----

 

七 Redis 与 Memcache 的区别

1. 性能相差不大

2. Redis可以持久化数据,Memcache不行

3. Redis 的数据结构很丰富, memcache相对较少

4. Redis依赖客户端实现分布式读写

5. Memcache本身没有数据的冗余机制

6. Redis支持快照,AOF, 依赖快照进行持久化, aof增强了可靠性的同时,对性能有所影响

7. memcache不支持持久化,通常做缓存提升性能

8. memcache在并发场景下,用cas保持一致性,redis事物支持比较弱,只能保证事物中的每个操作连续执行

9. redis用于数据量较小的高性能操作和运算上; memcache用于在动态系统中减少数据库负载,提升性能

 

八 缓存其他数据

Session  

session_set_save_handle

 


http://chatgpt.dhexx.cn/article/Xc0OTGFP.shtml

相关文章

SQL查询缓存

适合读者 本教程适合于那些对缓存SQL查询以减少数据库连接与执行的负载、提高脚本性能感兴趣的PHP程序员。 概述 许多站点使用数据库作为站点数据存储的容器。数据库包含了产器信息、目录结构、文章或者留言本,有些数据很可能是完全静态的,这些将会从一个…

数据库之查询缓存

查询缓存配置 查看当前的MySQL数据库是否支持查询缓存SHOW VARIABLES LIKE have_query_cache; 查看当前MySQL是否开启了查询缓存SHOW VARIABLES LIKE query_cache_type; 查看查询缓存的占用大小SHOW VARIABLES LIKE query_cache_size; 查看查询缓存的状态信息show status li…

数据库缓存

一、什么是数据库缓存 我们知道常见的数据库,比如oracle、mysql等,数据都是存放在磁盘中。虽然在数据库层也做了对应的缓存,但这种数据库层次的缓存一般针对的是查询内容,而且粒度也太小,一般只有表中数据没有变更的时…

【技术干货】缓存随谈系列之一:数据库缓存

本文作者: 乔锐杰 现担任上海驻云信息科技有限公司运维总监/架构师。曾任职过黑客讲师、java软件工程师/网站架构师、高级运维、阿里云架构师等职位。维护过上千台服务器,主导过众安保险、新华社等千万级上云架构。在云端运维、分布式集群架构等方面有着丰富的经验。 以…

内连接、外连接、全连接图示语法

外连接 外连接分为外左连接(left outer join)和外右连接(right outer join) left outer join 与 left join 等价, 一般写成left join right outer join 与 right join等价, 一般写成right join左连接:左侧交集部分 语法:…

MySQL 内连接、外连接、左连接、右连接、全连接

建表语句: CREATE TABLE a_table (a_id int(11) DEFAULT NULL,a_name varchar(10) DEFAULT NULL,a_part varchar(10) DEFAULT NULL ) ENGINEInnoDB DEFAULT CHARSETutf8CREATE TABLE b_table (b_id int(11) DEFAULT NULL,b_name varchar(10) DEFAULT NULL,b_part v…

SQL中的各种连接的区别总结(内连接,左连接,左外连接,右连接,右外连接,全连接,全外连接)

在数据库中建立两张表方便大家理解,teacher和student表(student表中的teacherid字段是对应teacher表中的ID,举个例子张三的老师就是李四,没有teacherid就是这个人暂时没有老师) INNER JOIN: 返回两个表的匹配得上的数据,不匹配不…

MYSQL语法:左连接、右连接、内连接、全外连接

文章目录 概念上手使用left join(左连接)rint join(右连接)inner join(内连接,等同join)full join(全连接,等同full outer join) 概念 left join(左连接):返回包括左表中…

MySQL 的等值连接、交叉连接、左外连接 、右外连接、全外连接实例

1. 测试数据 测试数据如下所示,数据库脚本(含数据)在文章最后的附录中给出。 测试工具:MySQL8.0 , Navicat Premium。 首先是一个班级表:class,class表中的数据如下所示。 学生表: student&a…

数据库学习之MySQL (十六)—— SQL99 外连接 左外连接 右外连接 全外连接 交叉连接

文章目录 外连接 之 左外连接 与 右外连接为啥要用外连接全外连接总结 内连接 外连接交叉连接 外连接 之 左外连接 与 右外连接 我们先来看个之前的 女神男朋友的案例 传送:数据库学习之MySQL (十三)——多表查询 SQL92 SQL99 连接种类划分 我们先考虑…

ORACLE的左右连接,全外连接

先上概念 oracle连接分为: 左外连接:左表不加限制,保留左表的数据,匹配右表,右表没有匹配到的行中的列显示为null。 右外连接:右表不加限制,保留右表的数据。匹配左表,左表没有匹配…

SQL的内连接、左连接、右连接、 交叉连接、全外连接

sql表连接分成 外连接 、 内连接 和 交叉连接。. 外连接包括三种,分别是左外连接、右外连接、全外连接。. 对应的sql关键字:LEFT/RIGHT/FULL OUTER JOIN,通常我们都省略OUTER关键字,写成LEFT/RIGHT/FULL JOIN。. 在左、右外连接中都会以一种表为基表,基表的所有行、…

Mysql中实现全外连接

MySql中多表查询只提供了内连接,左外连接与右外连接: table_reference {[INNER] JOIN | {LEFT|RIGHT} [OUTER] JOIN} table_reference ON conditional_expr 1】INNER JOIN ON内连接(只写join时默认为内连接) SELECT * FROM emp e…

mysql 全外连接报错的原因

mysql 不支持 直接写full outer join 或者 full join来表示全外连接但是可以用left right union right 代替。 全外连接图(非原创图) 下面的是全外连接例子: select * from table a A(A为别名)LEFT JOIN table b B …

Oracle:左连接、右连接、全外连接、(+)号详解

目录 Oracle 左连接、右连接、全外连接、()号详解 1、左外连接(LEFT OUTER JOIN/ LEFT JOIN) 2、右外连接(RIGHT OUTER JOIN/RIGHT JOIN) 3、全外连接(FULL OUTER JOIN/FULL JOIN&#xff0…

全外连接给你讲

你知道的越多,你不知道的就越多 先来看看标准SQL里面定义的外连接的三种类型: 左外连接右外连接全外连接 其中,左外连接和右外连接没有本质的区别,用作主表的表写在运算符左侧就是左外连接,卸载运算符右侧就是右外连接…

SegmentFault 技术周刊 Vol.30 - 学习 Python 来做一些神奇好玩的事情吧

前言 开始之前,我们先来看这样一个提问: python初学者,请教python学习路径 相信看完 X_AirDu 的回答我们已经对 Python 有了一个大概的了解。那接下来就让我们更深入的了解 Python 吧~ Python 入门 [零基础学Python]一些关于Python的事情 已经…

产品读书《金字塔原理》

PPT参考 1PPT参考2 其实我读这本书并不是把它当作一本读物来读,反倒觉得像是一本工具书,全书的内容可能干货不多,总结出来就是“金字塔”,倒没什么其他,再多也就是一些案例!但是这个思想已经能让人俯首称赞…

转载-代码的马斯洛金字塔

从科技爱好者周刊(第 156 期):显卡缺货与异业竞争看到的关于代码的马斯洛金字塔这种说法;搬运过来方便自己随时阅读; 原文是代码的马斯洛金字塔; 内容如下: As in Maslow’s pyramid, each laye…

需求挖掘:产品经理怎么基于项目做需求挖掘

零、需求分析的背景 日常工作中,我们常常面临别人提过来的需求要不要做,如何去挖掘新的需求、衡量需求的投入产出比等相应的场景,这些场景都涉及到我们对需求的分析和挖掘,也就意味着我们需要掌握足够多的认知和方法论去对指定的需…