数据缓存层的开发

数据缓存层用于对访问过的数据进行缓存,以提高访问效率。本书所讲述的数据缓存是以表为单位的数据缓存。

数据缓存层的原理

数据缓存层实际上就是对一个巨大的存在于内存中的DataSet进行管理,其原理如下:

(1)数据缓存层维护一个大DataSet,这个DataSet以static存在于应用程序中,这是缓存数据集。

(2)客户端发起请求,数据查询请求发送到数据缓存层。

(3)数据缓存层查询缓存起来的数据查询条件,查找该查询条件是否被使用过。

(4)如果该查询条件以前使用过,则不从数据库查询数据,只从缓存数据集中查询。

(5)如果该查询条件以前没有用过,则调用数据访问层从数据库中查询数据,并将查询数据合并到缓存数据集中,同时缓存该查询条件。

(6)更新数据时,将要更新的数据更新到数据库中,同时更新缓存数据集中的数据。

(7)在查询或更新数据时,都在缓存数据集相应数据表的扩展属性中记录当前访问时间。

(8)每隔一段时间对缓存数据集进行清理,当其中某条数据行超过一定时间(可以在配置文件中进行配置)没有访问,则将该表释放。

一  常见的缓存形式 :

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

参考:https://blog.csdn.net/m_nanle_xiaobudiu/article/details/79274156

转载于:https://www.cnblogs.com/guolei2570/p/8869643.html

数据缓存层及相关知识相关推荐

  1. 大数据的分布式数据库相关知识

    现如今,大数据的发展得到了越来越多人的关注,当然,很多企业也开始关注大数据,通过大数据可以从数据中挖掘出有价值的数据,从而找出隐藏的商机,而大数据的分布式数据库是一个十分重要的内容.我们在这篇文章中就 ...

  2. HTTP缓存原理及相关知识(2)-CDN

    一.CND的定义 CDN的全称是Content Delivery Network,即内容分发网络.其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快.更稳定.通 ...

  3. 数据中心暖通相关知识与空调规划设计知识

    ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ...

  4. 『数据稽核』的相关知识

    1.异方差 异方差性(heteroscedasticity )是相对于同方差而言的.所谓同方差,是为了保证回归参数估计量具有良好的统计性质,经典线性回归模型的一个重要假定:总体回归函数中的随机误差项满 ...

  5. oracle缓存和Redis,说说数据缓存那点事:Redis和memcached对比

    [此为"一森咖记"公众号--第86篇文章] 本文预计阅读15分钟 [引言] 当我们为一个并发量较大的应用做数据架构时,会考虑使用缓存,意欲达到三个目标: 1. 加快用户访问速度,提 ...

  6. Web缓存相关知识整理

    一.前言  工作上遇到一个这样的需求,一个H5页面在APP端,如果勾选已读状态,则下次打开该链接,会跳过此页面.用到了HTML5 的本地存储 API 中的 localStorage作为解决方案,回顾了 ...

  7. Redis 九种数据结构及其底层实现 持久化 缓存机制 过期键与内存淘汰 集群等相关知识

    参考内容: B站尚硅谷Redis视频教程 <Redis 6 入门到精通 超详细 教程> B张黑马程序员Redis视频教程 <黑马程序员Redis入门到实战教程,全面透析redis底层 ...

  8. 阿里工程师是如何系统化地总结缓存相关知识的

    随着互联网业务的快速迭代以及用户量激增,应用架构需要不断调整甚至重构以适应这种业务的快速发展.当数据量迅速增长,业务逻辑越复杂,服务链路不断增加等等一系列问题,会导致RT过长,服务性能需要逐渐提升以满 ...

  9. 微信小程序开发数据缓存基础知识辨析以及运用实例

    微信小程序开发数据缓存基础知识辨析以及运用实例 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的 ...

最新文章

  1. “23岁本科生发14篇SCI”,文章被学校官网悄悄删了,你怎么看?
  2. 获取weblogic上指定文件的路径 java_项目部署到WebLogic文件路径访问不正确
  3. 初步认识Linux oops 消息
  4. python与其他编程语言对比优点_Python编程不同于其他编程语言的优点
  5. linux操作系统使用论文_Linux高性能服务器设计
  6. tkinter frame背景色_Tkinter教程-基础组件(三)
  7. E20171214-sl
  8. 手机充电IC设置电流与实测电流不一致问题剖析
  9. 阿里云-流量控制策略
  10. confluence统计用户文章_首次,Flink公众号公开一些后台统计数据
  11. matplotlib 可视化 —— 移动坐标轴(中心位置)
  12. 《云计算:原理与范式》一3.4 SaaS范式面临的挑战
  13. 黄聪:WordPress图片插件:Auto Highslide修改版(转)
  14. 【toplink】 位居第一的Java对象关系可持续性体系结构
  15. 几款Mac下载神器推荐,让你相见恨晚的MacBook神器
  16. MT4跟单软件的API跟单模式有多少种?
  17. 这个开源好用的数据库建模工具,让我眼前一亮
  18. visual_studio2013、vs2013下载
  19. js数字金额转大写,javaScript数字金额转大写。
  20. 提供免费的Java OA系统 解决方案

热门文章

  1. catti二级笔译综合能力真题_2017年5月英语二级笔译综合能力试题回忆
  2. 一、自动化测试——Airtest+Poco快速上手
  3. 这份 pip 使用方法,应该算是全网最全了
  4. 讯飞实时语音转写 python3.6.1 可完美运行 解析返回的json字符串 输出所获语音文字
  5. cocos creator制作游戏实战-Flak Cannon(二)
  6. Capture One 22 最新推出全景拼接功能
  7. 自己申请计算机软件著作权可以下载电子版原件了?
  8. robocup3d仿真平台的安装
  9. RT_thread STM32通用Bootloader 做OTA升级
  10. BilSTM 实体识别_NLP-入门实体命名识别(NER)+Bilstm-CRF模型原理Pytorch代码详解——最全攻略