网站各级缓存

本文介绍了网站的缓存流程,包括客户端缓存、DNS(CDN)缓存、反向代理缓存和本地及分布式缓存。重点讲解了.NET Core 3.1中的客户端缓存配置以及Redis作为分布式缓存的五大数据结构:string、Hash、List、Set和Zset,并举例说明了Redis在实际场景中的应用,如数据缓存、计数、秒杀和分布式锁等。

首先是一个缓存流程图在这里插入图片描述

客户端缓存

存于客户端浏览器以及硬盘上的缓存,客户端缓存的流程:第一次请求-->服务器返回,协商缓存(过期时间、缓存的key<请求地址的url>、缓存内容)-->第二次请求直接访问缓存
常见类型:
memory cache:内存缓存;
disk cache:硬盘缓存;
prefetch:预加载缓存,浏览器输入地址后,在手动请求之前,浏览器实际就已经请求了,并存于客户端;

实现《.net core3.1》:

静态文件:
可以在Startup.cs文件中进行配置;
动态页面缓存:
1.使用特性:[ResponseCache(Duration = 60)]
2.使用代码:base.HttpContext.Response.Headers[“Cache-Control”] = “public,max-age=60”;

DNS(CDN)缓存

DNS是进行域名解析,属于正向代理,同时也是离用户最近的一层,这个缓存属于第三方服务,所以需要购买,根据和服务商协商缓存的规则进行CDN缓存,这个缓存针对群体用户。

反向代理缓存

反向代理:客户端请求到达反向代理服务器,反向代理服务器在请求服务器,服务器响应成功后在到的反向代理服务器,方向代理服务器在把请求的数据转发给客户端。
实现:
nginx ->配置端口监听->配置缓存地址->配置缓存规则
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

本地缓存

属于服务端缓存;
Memory cache,也叫内存缓存,本地缓存;
特点:存于内存,速度快,存于当前线程,重启会释放,体积有限,服务器集群后缓存不能共享;

分布式缓存

属于服务端缓存;
这里使用的是Redis,也叫分布式缓存;

Redis五大数据结构:
1.string数据格式;

string是redis最基本的类型,而且string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象

2.Hash数据格式:

Redis hash 是一个键值对集合;
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象

3.List数据格式:

redis的list类型其实就是一个每个子元素都是string类型的双向链表。所以[lr]push和[lr]pop命令的算法时间复杂度都是O(1)另外list会记录链表的长度。所以llen操作也是O(1).链表的最大长度是(2的32次方-1)。我们可以通过push,pop操作从链表的头部或者尾部添加删除元素。这使得list既可以用作栈,也可以用作队列

4.set数据格式:

Redis的Set是string类型的无序集合,是通过HashTable实现的

5.Zset(sorted-set)数据格式:

Zset 就是一个集合,集合的概念就是一堆不重复值的组合。利用Redis提供的Zset 数据结构,可以存储一些集合性的数据。

特点:单线程模型,速度快,服务器集群后缓存可以共享,存于单独的一个线程;
Redis具体问题中的使用<基于Redis的key-value数据格式>:
1.数据缓存–菜单/权限/类别/数据字典–相对稳定即时性要求低的数据;
2.文章点赞/阅读量–数据变化太快–数据库压力太大–Redis缓存–读写快–开启持久化(100/1000次写一次数据库)–缓冲层;
3.密码错误24小时最多5次尝试(每天投票次数)–账号做key+次数做value–有效期24小时;
4.秒杀–产品少但是并发高,数据库压力大–请求先走Redis–有库存才到数据库–否则直接失败,不到数据库–基于Redis单线程模型–没有线程安全问题–类似缓冲层;
5.分布式Session–类似于数据缓存;
6分布式锁(比较麻烦,一个线程请求某段代码时,向redis中写入一个值,使用结束后在销毁这个值,其他线程调用时先检查是否有这个值<大致意思>)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值