数据库缓存层

一  常见的缓存形式 :

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,一经查实,立即删除!

相关文章

python面试题~反射,元类,单例

1 什么是反射?以及应用场景? test.py def f1():print(f1) def f2():print(f2) def f3():print(f3) def f4():print(f4) a 1 复制代码import test as ss ss.f1() ss.f2() print(ss.a) 复制代码我们要导入另外一个模块,可以使用import.现在有这样的需求,我…

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

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

idea-spark-sbt 打包jar

1、打开idea下的terminal窗口 2、只打包部分项目 sbt insight-import/clean insight-import/assembly 这表示只打包主目录下的insight-import项目 ,先清理(clean)再打包(assembly)不能用package,这个不会打…

操作Checkbox标签

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

memcache在项目中的应用

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

点击回退按钮刷新页面

浏览器用户返回上一步&#xff0c;自动刷新window.οnunlοadfunction(){} 这个最简单粗暴 方式一、<input type"hidden" id"refreshed" value"no"><script type"text/javascript">οnlοadfunction(){var edocument.getE…

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

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

python数据类型之间的转换

对python内置的数据类型进行转换时&#xff0c;可以使用内置函数&#xff0c;常用的类型转换函数如下 python常用类型转换函数函数格式使用示例描述int(x [,base])int("8") 可以转换的包括String类型和其他数字类型&#xff0c;但是会丢失精度 float(x) float…

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

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

Redis在PHP项目中的应用

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

Linux关机、重启命令

关机shutdown -h 0 #<O秒后关机shutdown -h now #<现在关机shutdown -h 10 #<10分钟后关机shutdown -h 23:20 #<23&#xff1a;20分关机shutdown -c #<取消shutdown关机命令init 0 #<立马关机&#xff08;切换运行级别为0&#xff0c;推荐使用&#xff09;ha…

Python 模块之 string.py

用法 字符串常量&#xff1a; import string print(string.ascii_lowercase) print(string.ascii_uppercase) print(string.ascii_letters) print(string.digits) print(string.hexdigits) print(string.octdigits) print(string.punctuation) print(string.printable)结果 abc…

md5和password_hash孰好孰坏

md5自不必说,想必所有phper都用过,但另一个加密函数不知道你见过没有 他就是password_hash(); 加密方式更全面.使用起来也比md5salt这种方式要简洁很多,最主要的是难破解,因为它每时每刻都在变动 它的使用方式大致是这样 1. 用户注册时提交过来密码,我们对用户密码进行加密…

Logstash 命令行参数

Logstash 提供了一个 shell 脚本叫 logstash 方便快速运行。它支持以下参数&#xff1a; -e意即执行。我们在 “Hello World” 的时候已经用过这个参数了。事实上你可以不写任何具体配置&#xff0c;直接运行 bin/logstash -e ” 达到相同效果。这个参数的默认值是下面这样&…

上汽拒绝HW符合商业逻辑

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

javac compiling error ( mising package)

javac 编译java源文件时&#xff0c;提示 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录音

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

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

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

Oracle 12C CDB、PDB常用管理命令

--查看PDB信息&#xff08;在CDB模式下&#xff09; show pdbs --查看所有pdb select name,open_mode from v$pdbs; --v$pdbs为PDB信息视图 select con_id, dbid, guid, name , open_mode from v$pdbs; --切换容器 alter session set containerorcl1 --切换到PDBorcl1容器…

指定时间的月初和月末一天的写法

DateTime dt Convert.ToDateTime("2017-2");DateTime FirstDay new DateTime(dt.Year, dt.Month, 1);//本月初1號DateTime LastDay new DateTime(dt.AddMonths(1).Year, dt.AddMonths(1).Month, 1).AddDays(-1);//下月初1號減一天本月底 转载于:https://www.cnblo…