数据库缓存层

一  常见的缓存形式 :

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://www.mzph.cn/news/282612.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

仅有50Mb大小的cli即可搞定大厂才能玩的CloudIDE丨SmartIDE

作者:徐磊,开源云原生SmartIDE创始人、LEANOSFT创始人/首席架构师/CEO,微软最有价值专家MVP/微软区域技术总监Regional Director,华为云最有价值专家。从事软件工程咨询服务超过15年时间,为超过200家不同类型的企业提供…

操作Checkbox标签

在前端开发中,少不了对Checkbox的操作。 常用的的方法有2个:.is()和.prop()方法。前者是判断 checkbox的状态,选不是未选。而后者为checkbox设置一个值,可以设置checkbox是true还是false。写个小例子,练习一下&#xf…

memcache在项目中的应用

一 安装memcache 具体流程这篇文章有写到: 点击 链接 二 在项目中应用memcache 为了减轻数据库的查询压力,所以我们把一些不经常变动的数据进行缓存,用户查询时,如果查询的要求是一样的,我们就memcache缓存中读取数据并返回去,如果查询要求变了,我们再到数据库中查询,并将查…

Dapr 证书过期了怎么办? 别慌,有救!

一、背景Dapr 默认证书有效时间是1年,证书过期后就不能执行相关控制面和数据面的交互了,如下图:二、查看证书有效时间通过dapr mtls expiry 看到期时间,具体参见命令https://v1-7.docs.dapr.io/reference/cli/dapr-mtls/dapr-mtls…

js高级程序设计的笔记(一)

2019独角兽企业重金招聘Python工程师标准>>> 1.js中的 null : 如果只意在保存对象的变量还没有真正的保存对象之前,就需要先把该变量保存 null值, null代表空对象的指针 2.函数的参数对象 arguments的理解。 argument对象的length属性 实例 f…

Redis在PHP项目中的应用

一 运行redis服务端 出现上图的图形,就说明redis服务端开启成功,并且开启了密码功能(如果不加载配置文件,连接redis是不需要密码的,这样,会给我们的程序带来很大隐患) 密码的设置: 在redis配置文件中,搜索requirepass ,后面设置密码 比如 : requirepass G506myredis 则表示此…

上汽拒绝HW符合商业逻辑

不久前,上汽董事长陈虹表示“与HW合作自动驾驶是不可接受的。这就好比一家公司为我们提供整体的解决方案,如此一来,它就成了灵魂,而上汽就成了躯体。对于这样的结果,上汽是不能接受的,要把灵魂掌握在自己手…

javac compiling error ( mising package)

javac 编译java源文件时,提示 package does not exist 的错误 Test.java import java.security.MessageDigest; import org.apache.commons.codec.binary.Hex;public class Test{public static void main(String args[]){boolean isAlarmed true;boolean aa isAla…

使用ffmpeg录音

官方教程:http://ffmpeg.org/ffmpeg.html 录音方法: 开始找到了这个方法,但是不行呀,好像是没有这个oss吧。 oss 是linux 下的声音相关的东西,与alsa 一样,不过oss 是商业的, 而/dev/dsp 是oss …

Mysql慢查询日志的使用 和 Mysql的优化

一、生成实验数据 原理:sql 蠕虫复制(这种生成数据方式同样适用于数据表中有主键的情况)。 insert into comic (name,pen_name,cover) select name,pen_name,cover from comic 二、慢查询日志设置 当语句执行时间较长时,通过日…

thinkphp出现Call to undefined function Think\C() in ... online 313

造成这个问题的原因很多,在这里我只说明我自己遇到之后解决的办法 我将functions.php改成了function.php之后,修改了一些其他无关紧要的东西出现了这个问题,来回排查,各种尝试,最后,将function.php改回functions.php,可以正常运行

WPF效果第一百九十九篇之Gamma曲线

前面效果中分享了模块对比;今天大周末那就再来分享一下最近实现的效果;基于YX^n公式根据不同的系数绘制Gamma曲线效果如下图:1、曲线的话,咱就用最简单的方式绘制一堆点:PathFigure pathFigure new PathFigure(){StartPoint new Point(0, count),};for(double x 0; x < 1…

深入理解Spring Boot数据源与连接池原理

​ Create by ysterfoxmail.com 2018-8-2一&#xff1a;开始 在使用Spring Boot数据源之前&#xff0c;我们一般会导入相关依赖。其中数据源核心依赖就是spring‐boot‐starter‐jdbc 如下 <dependency><groupId>org.springframework.boot</groupId> …

Dapr 集成 Open Policy Agent 实现 接口的访问控制

大型项目中基本都包含有复杂的访问控制策略&#xff0c;特别是在一些多租户场景中&#xff0c;例如Kubernetes中就支持RBAC&#xff0c;ABAC等多种授权类型。Dapr 的 中间件 Open Policy Agent 将Rego/OPA策略应用到传入的Dapr HTTP请求中。Open Policy AgentOpen Policy Agent…

【招聘(大连)】北森云计算 .NET 专场招聘

为了更好的实现战略布局&#xff0c;逐步形成以三个产品研发中心&#xff08;北京、成都、大连&#xff09;为主&#xff0c;青岛和南京为辅的产品研发团队配置。北森云第三研发中心&#xff08;大连&#xff09;正式成立&#xff0c;目前大连的人选招聘正式开启&#xff0c;欢…

C#多线程编程-必知必会

“发现问题的能力&#xff0c;运用技术解决问题的能力&#xff0c;是一个技术人成长的关键”图片故事&#xff1a;洋姜的花&#xff0c;拍摄于2022年7月23日&#xff0c;地点&#xff1a;北京奥林匹克森林公园 &#xff0c;摄影师&#xff1a;刘先生概要&#xff1a;使用C#发起…

『中级篇』Dockerfile详解(17)

一般的&#xff0c;Dockerfile 分为四部分&#xff1a;基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。 ####官网学习 https://docs.docker.com/engine/reference/builder/#usage ####FROM 必须为第一个命令&#xff0c;指定基础镜像 FROM <image> FROM &…

KestrelServer详解[1]:注册监听终结点(Endpoint)

具有跨平台能力的KestrelServer是最重要的服务器类型。针对KestrelServer的设置均体现在KestrelServerOptions配置选项上&#xff0c;注册的终结点是它承载的最重要的配置选项。这里所谓的终结点&#xff08;Endpoint&#xff09;与“路由”介绍的终结点不是一回事&#xff0c;…

快来加入阿里云大学【云学院】班级助理招募—机会稍纵即逝,错过遥遥无期!...

2019独角兽企业重金招聘Python工程师标准>>> 如果你对云计算、大数据、云安全、人工智能领域感兴趣~ 如果你想从事与此相关的工作~~ 如果你又喜欢边交流边学习的方式~ 那么&#xff0c;加入我们吧&#xff01; 我们将为你提供一个广阔的平台&#xff0c;让你接触到云…

深入理解ajax系列第五篇——进度事件

前面的话 一般地&#xff0c;使用readystatechange事件探测HTTP请求的完成。XHR2规范草案定义了进度事件Progress Events规范&#xff0c;XMLHttpRequest对象在请求的不同阶段触发不同类型的事件&#xff0c;所以它不再需要检査readyState属性。这个草案定义了与客户端服务器通…