redis 缓存

redis和memcache称为非关系型数据库,也成为了nosql数据库。而mysql,oracle,mariadb,sql server等都是关系型数据库

1.1 缓存概念

缓存是为了调节速度不一致的两个或者多个物质的速度,在中间对速度较快的一方起到一个加速访问速度较慢的一方的作用,比如cpu的一级二级缓存保存了cpu最近经常访问的数据,内存是保存cpu经常访问硬盘的数据,而且硬盘也有大小不一的缓存,甚至屋里机器的raid卡也有缓存,都是为了起到加速cpu访问硬盘数据的目的。

redisBufferWrite redisbufferwrite作用_缓存

2.1 系统缓存

2.1.1 buffer和cache

  • buffer:缓冲也叫写缓冲,一般用于写操作,可以将数据先写入内存再写入磁盘,buffer一般用于写缓冲,用于解决不同介质的速度不一致的缓冲,先将数据临时写入离自己最近的地方,以提高写入速度,cpu会把数据先写到内存的磁盘缓冲区,然后认为数据已经写入完成,然后由内核在后续的时间再写入磁盘,所以服务器突然断电会丢失内存中得到部分数据。
  • cache: 缓存也叫读缓存,一般用于读操作,cpu读文件从内存读,如果内存没有就先从硬盘读到内存再读到cpu,将需要频繁读取的数据放在离自己最近的区域,下次读取的时候可以快速读取。

2.1.2 cache的保存位置

客户端:浏览器 内存:本地服务器,远程服务器 硬盘:本地硬盘,远程服务器硬盘

2.1.3 cache的特性

  • 自动过期:给缓存的数据加上有效时间,超出时间后自动过期删除
  • 过期时间:强制过期,源网站更新图片后,CDN是不会更新的,需要强制使图片缓存过期
  • 命中率: 即缓存的读取命中率

3.1 用户层缓存

3.1.1 dns缓存

默认为60秒,60秒内访问同一个域名不再进行dns解析,查看chrome的dns缓存

chrome://net-internals/#dns

redisBufferWrite redisbufferwrite作用_客户端_02

4.1 CDN缓存

内容分发网络,通过将服务分发至全网加速节点,利用全球调度系统使用户能够就近获取,有效降低访问延迟,提升服务性能
CDN:

  • 第一,降低机房的使用宽带,因为很多资源通过cdn就直接返回给用户了
  • 第二,解决不同运营商之间的互联,让联通的网络访问联通,电信的网络访问电信,
  • 第三,解决用户访问的地域问题,就近返回用户资源

4.1.1 用户请求CND流程

提前对静态内容进行预缓存,避免大量的请求回源,导致主站网络带宽被打满而导致数据无法更新,另外cdn可以将数据根据访问的不通热度不同进行不同级别的缓存,例如访问量最高的放在内存,其次放在ssd或者sata。再其次的放到云端

redisBufferWrite redisbufferwrite作用_redisBufferWrite_03

4.1.2 CDN优势

  • 调度准确
  • 性能优化
  • 安全相关
  • 节省宽带

4.1.3 应用层缓存

nginx,web等web服务可以设置应用缓存以加速响应用户请求

4.1.4 其他层面缓存

Cpu缓存,分为一级缓存,二级缓存等

redisBufferWrite redisbufferwrite作用_客户端_04

5.1 cookie与session

cookie是访问某些网站后在本地存储的一些网站相关的信息,下次访问的时候减少一些步骤,比如加密后的账号密码信息等,cookies是服务端在客户端浏览器存储的小段文本并随每一个请求发送至同一个服务器,是一种实现客户端保持状态的方案,session称为会话信息,位于web服务器上,主要负责访问者与网站之间的交互,当浏览器请求http地址时,可以基于之前的session实现会话保持,会话共享

5.1.1 session与cookie的区别

  • cookie以文本形式存储在浏览器上,而session存储在服务端
  • cookie的存储限制了数据量,只允许4k,而session是无限制的
  • cookie包含在每一个客户端请求报文中,因此容易被人截获
  • cookie和session都可以设置过期时间