赞
踩
本章学习目标:
页面缓存:页面自身对某些元素或全部元素进行存储,并保存成文件。
html5:Cookie、WebStorage(SessionStorage和LocalStorage)、WebSql、indexDB、Application Cache等
开启步骤:
1、设置manifest描述文件
CACHEMANIFEST
#comment
js/index.js
img/bg.png
2、html关联manifest属性
<htmllang="en"manifest="demo.appcache">
3、使用LocalStorage进行本地的数据存储,示例代码:
localStorage.setItem("Name","张飞")localStorage.getItem("Name")
localStorage.removeItem("Name")
localStorage.clear()
当客户端向服务器请求资源时,会先抵达浏览器缓存,如果浏览器有“要请求资源”的副本,就可以直接从浏览器缓存中提取而不是从原始服务器中提取这个资源。
浏览器缓存可分为强制缓存和协商缓存。
强制缓存:直接使用浏览器的缓存数据
条件:Cache-Control的max-age没有过期或者Expires的缓存时间没有过期
<metahttp-equiv="Cache-Control"content="max-age=7200"/>
<metahttp-equiv="Expires"content="Mon,20Aug201023:00:00GMT"/>
协商缓存:服务器资源未修改,使用浏览器的缓存(304);反之,使用服务器资源(200)。
<metahttp-equiv="cache-control"content="no-cache">
为什么是删除缓存,而不是更新缓存呢?
1、缓存的值是一个结构:hash、list,更新数据需要遍历
先遍历(耗时)后修改
2、懒加载,使用的时候才更新缓存
使用的时候才从DB中加载
也可以采用异步的方式填充缓存
开启一个线程定时将DB的数据刷到缓存中
高并发脏读的三种情况
1、先更新数据库,再更新缓存
update与commit之间,更新缓存,commit失败
则DB与缓存数据不一致
2、先删除缓存,再更新数据库
update与commit之间,有新的读,缓存空,读DB数据到缓存数据是旧的数据commit后 DB为新数据
则DB与缓存数据不一致
3、先更新数据库,再删除缓存(推荐)
update与commit之间,有新的读,缓存空,读DB数据到缓存数据是旧的数据commit后 DB为新数据
则DB与缓存数据不一致
采用延时双删策略
缓存的整体设计思路包括:
1、多层次
2、数据类型
3、要做集群
4、缓存的数据结构设计
1、与数据库表一致
2、与数据库表不一致
需要存储关系,聚合,计算等
比如某个用户的帖子、用户的评论。以用户评论为例,DB结构如下:
如果要取出UID为1000的用户的评论,原始的表的数据结构显然是不行的。
我们应做如下设计:
key:UID+时间戳(精确到天) 评论一般以天为计算单位
value:Redis的Hash类型。field为id和content
expire:设置为一天
拉勾网(www.lagou.com),是国内的招聘门户网站,亿万级PV,单机响应性能QPS万级。首页分析:
职位时时变化,不能使用静态html
采用模板技术,数据在服务端拿出,不能为空
数据不一定时时
架构图如下:
1、静态文件
2、职位列表
3、热门职位
3、热门职位
4、数据回填
5、热点策略
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。