缓存

在浏览器中输入网址后是怎么跳转到指定的服务器的

血红的双手。 提交于 2020-03-12 18:53:10
1. 首先,在浏览器里输入网址 2. 浏览器查找域名的IP地址 DNS查找过程如下: 浏览器缓存 – 浏览器会缓存DNS记录一段时间。 操作系统没有告诉浏览器储存DNS记录的时间,所以不同浏览器会储存各自固定的一个时间(2分钟到30分钟不等)。 系统缓存 – 如果在浏览器缓存里没有找到需要的记录,浏览器会做一个系统调用(windows里是gethostbyname)。这样便可获得系统缓存中的记录。 路由器缓存 – 接着,前面的查询请求发向路由器,它一般会有自己的DNS缓存。 ISP DNS 缓存 – 接下来要check的就是ISP缓存DNS的服务器。在这一般都能找到相应的缓存记录。 递归搜索 – 你的ISP的DNS服务器从跟域名服务器开始进行递归搜索,从.com顶级域名服务器到Facebook的域名服务器。一般DNS服务器的缓存中会有.com域名服务器中的域名,所以到顶级服务器的匹配过程不是那么必要了。 DNS返回多个IP时的解决方案: 1.负载平衡器:是以一个特定IP地址进行侦听并将网络请求转发到集群服务器上的硬件设备。 一些大型的站点一般都会使用这种昂贵的高性能负载平衡器。 2. 地理DNS:根据用户所处的地理位置,通过把域名映射到多个不同的IP地址提高可扩展性。这样不同的服务器不能够更新同步状态,但映射静态内容的话非常好。比如输入google.com在中国返回www

LWIP_ARP协议(1缓存表数据结构)

橙三吉。 提交于 2020-03-12 11:53:31
前言 从前面的文章,我们知道,ARP协议的核心是ARP缓存表,而ARP协议的实质就是对缓存表项(entry)的建立、更新、查询等操作。 那么,LwIP中是是怎么实现ARP协议的呢? ARP缓存表的数据结构 LwIP使用一个arp_table数组描述ARP缓存表,数组的内容是表项的内容,每个表项都必须记录一对IP地址与MAC地址的映射关系,此外还有一些基本的信息,如表项的状态、生命周期(生存时间)以及对应网卡的基本信息,LwIP使用一个etharp_entry结构体对表项进行描述。 而且LwIP预先定义了缓存表的大小,ARP_TABLE_SIZE默认为10,也就是最大能存放10个表项,由于这个表很小,LwIP对表的操作直接采用遍历方式,遍历每个表项并且更改其中的内容。 static struct etharp_entry arp_table [ ARP_TABLE_SIZE ] ; struct etharp_q_entry { struct etharp_q_entry * next ; struct pbuf * p ; } ; struct etharp_entry { # if ARP_QUEUEING /** 指向此ARP表项上挂起的数据包队列的指针. */ struct etharp_q_entry * q ; # else /* ARP_QUEUEING */ /**

mybatis与hibernate对比

拥有回忆 提交于 2020-03-12 04:54:53
第一方面:开发速度的对比 就开发速度而言,Hibernate的真正掌握要比Mybatis来得难些。Mybatis框架相对简单很容易上手,但也相对简陋些。个人觉得要用好Mybatis还是首先要先理解好Hibernate。 比起两者的开发速度,不仅仅要考虑到两者的特性及性能,更要根据项目需求去考虑究竟哪一个更适合项目开发,比如:一个项目中用到的复杂查询基本没有,就是简单的增删改查,这样选择hibernate效率就很快了,因为基本的sql语句已经被封装好了,根本不需要你去写sql语句,这就节省了大量的时间,但是对于一个大型项目,复杂语句较多,这样再去选择hibernate就不是一个太好的选择,选择 mybatis 就会加快许多,而且语句的管理也比较方便。 第二方面:开发工作量的对比 Hibernate和MyBatis都有相应的代码生成工具。可以生成简单基本的DAO层方法。针对高级查询,Mybatis需要手动编写SQL语句,以及ResultMap。而Hibernate有良好的映射机制,开发者无需关心SQL的生成与结果映射,可以更专注于业务流程。 第三方面:sql优化方面 Hibernate的查询会将表中的所有字段查询出来,这一点会有性能消耗。Hibernate也可以自己写SQL来指定需要查询的字段,但这样就破坏了Hibernate开发的简洁性。而Mybatis的SQL是手动编写的

Mybatis---缓存

陌路散爱 提交于 2020-03-12 02:08:35
1.缓存 1.1 简介 查询: 连接数据库,耗资源! ​ 一次查询的结果,给他暂存在一个可以直接取到的地方!—>内存:缓存 我们再次查询相同数据的时候,直接缓存,就不用走数据库了 什么是缓存【Cache】 存在内存中的临时数据。 将用户经常访问的数据放到缓存(内存)中 为什么使用缓存 减少和数据库的交互次数,减少系统开销,提高系统效率。 什么样的数据能使用缓存? 经常查询并不经常改变的数据。【可以使用缓存】 1.2 Mybatis默认定义了两级缓存: 一级缓存 一级缓存默认开启,只在一次sqlSession中有效,也就是从getSqlSession()到close()的过程之间 两次查询只执行了一次sql语句,第一次次sql查询被加入到缓存当中。 接口: User queryUserById ( @Param ( "id" ) int id ) ; mapper.xml < select id = " queryUserById " resultType = " user " parameterType = " _int " > select * from mybatis_test.m_user where id = #{id} </ select > 测试类: @Test public void test ( ) { SqlSession sqlSession =

mysql 学习笔记 01

孤街醉人 提交于 2020-03-11 23:29:43
知识大纲 客户端查询请求流程 先来看客户端运行一条查询 sql 会经过哪些流程: mysql 基本组成结构 从上面的图中可以看出,mysql 大致由 server 层 和 存储引擎层组成。 为了管理方便,mysql 把连接管理、查询缓存、语法解析、查询优化这些并不涉及真实数据存储的功能划分为 server 层的功能,把真实存取数据的功能划分为存储引擎的功能。 下面详细说明下各个模块的功能: 一、server server 层又分别由 连接器、查询缓存、分析器、优化器、执行器组成。 1.1 连接器 mysql 是 C/S 架构,每当有一个客户端连接到服务器时,服务器都会创建一个线程来专门处理与这个客户端的交互。 客户端和服务端的连接方式总共有三种。 TCP/IP 命名管道和共享内存(Windows 系统, 客户端和服务端 必须在同一台机器) Unix 域套接字文件(类Unix 系统,客户端和服务端 必须在同一台机器) 注意: 如果用户名密码认证通过,连接器会到权限表里面查出你拥有的权限。之后,这个连接里面的权限判断逻辑,都将依赖于此时读到的权限。 也就是说即使管理员在此时修改了用户的数据库权限,只有用户重新建立连接才会生效。 当客户端与服务端建立连接后,客户端就会以文本消息的方式与服务端通信(CRUD)。服务端接收到消息后(比如一个查询请求),还要进行一系列处理,才能返回数据给客户端

MYSQL 逻辑架构

我们两清 提交于 2020-03-11 17:48:56
MYSQL 逻辑架构 思维导图 前言 》 Mysql并非尽善尽美,但足够灵活,能适应高要求环境,如Web应用。 》 Mysql在众多平台上运行良好,支持多种数据类型,但不支持对象类型(Mongodb支持) 》 Mysql的存储引擎可以基于表建立,以满足对数据存储,性能,特征及其他特性的各种需要。 架构逻辑视图 每个虚线框为一层,总共三层。 第一层,服务层(为客户端服务):为请求做连接处理,授权认证,安全等。 第二层,核心层:查询解析,分析,优化,缓存,提供内建函数;存储过程,触发器,视图。 第三层,存储引擎层,不光做存储和提取数据,而且针对特殊数据引擎还要做事务处理。 连接管理与安全性(第一层 服务层) > 处理流程 Δ 每个连接的查询都在一个进程中的线程完成。 Δ 服务器负责缓存线程,所以服务层不需要为每个连接新建线程。 > 认证流程    优化与执行 > 在解析查询之前,服务器会“询问”是否进行了查询缓存(只能缓存SELECT语句和相应结果)。缓存过的直接返回结果,未缓存的就需要进行解析查询,优化,重新执行返回结果。 > 解析查询时会创建一个内部数据结构(树),然后对其进行各种优化。 > 优化:重写查询,决定查询的读表顺序,选择需使用的索引。 思维导图 前言 》 Mysql并非尽善尽美,但足够灵活,能适应高要求环境,如Web应用。 》 Mysql在众多平台上运行良好

缓存之穿透,击穿,雪崩

十年热恋 提交于 2020-03-11 17:37:40
1、缓存穿透 概念: 正常情况下,需要查询的数据都存在,当查询一个缓存和数据库都不存在的数据时,每次请求都会落在数据库里,这种情况成称为缓存穿透。 问题: 缓存穿透一般会导致数据库压力增大。恶意攻击会击垮数据库。会绕过缓存。 解决: 1、在接口增加参数校验,不合法的直接返回。 2、缓存空值,将对应key的value设置为空值,避免暴力攻击。同时将key失效时间设置短一些,避免影响正常使用。 3、在网关阈值,限制同ip访问量。 4、高级用户布隆过滤器。bloom filter,可以对key进行判断是否在数据库存在,不存在就直接返回,存在就查询出来,并刷新缓存。 2、缓存击穿 概念: 高并发系统中,大量请求一般会落在缓存中,但在某一时刻这个热点key过期了,此刻大量请求就会落在数据库。 问题: 会导致数据库压力增大,严重者击垮数据库。 解决: 1、设置热点key不过期。 2、加上分布式锁,每次只有拿到锁的线程可以去访问数据库。第一个线程查询到后就会缓存起来,后面线程从缓存中拿。 3、缓存雪崩 概念: 某一时刻发生大规模缓存不可用问题,比如宕机,过期。 问题: 轻则查询变慢,重则大面积服务不可用。 解决: 1、采用分布式集群,减少宕机风险。 2、将key的失效时间设置为随机数,避免大量缓存同时失效。 3、采用本地缓存加限流逻辑。 来源: oschina 链接: https://my

课时11:禁用、清理二级缓存,以及整合Ehcache缓存

烈酒焚心 提交于 2020-03-10 20:56:16
.1)如何禁用二级缓存   1 在具体要关闭的mapper.xml中的select标签里面填写 <select id="selectStudentById" resultType="student" parameterType="Integer" useCache="false"> select * from student where stuno=#{stuno} </select> .2).清理:与清理缓存一级缓存相同  1 SqlSession.close()才会记录成缓存;(执行增删改会将缓存清除了;设计的原因 是为了脏数据的产生) 在二级缓存中,SqlSession.commit()不能查询自身的commit()。     SqlSession.commit()会清理一级缓存和二级缓存;但是清理二级缓存时不能查询自身的SqlSession.commit()  2 在select标签中添加flushCache="true"也可以清除缓存 .3)命中率:   1.zs:0% ===>50% ===> 66.6% ===> 75% .4)整合Ehcache二级缓存 (第三方缓存有很多种,以Ehcache为例)   1.需要导入如下三个jar包 <!-- https://mvnrepository.com/artifact/net.sf.ehcache/ehcache-core

Web前端技术分享之浏览器缓存机制

陌路散爱 提交于 2020-03-10 19:37:00
Web缓存是指一个Web资源(如HTML页面、图片、JS、数据等)存在于Web服务器和客户端(浏览器)之间的副本。一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟,并且由于缓存文件可以重复利用,还可以减少带宽,降低网络负荷。但如何理解浏览器缓存呢?接下来的我就给大家简单介绍一下。 Web缓存有什么作用? 1、减少网络带宽消耗。无论对于网站运营者或者用户,带宽都代表着金钱,过多的带宽消耗,只会便宜了网络运营商。当Web缓存副本被使用时,只会产生极小的网络流量,可以有效的降低运营成本。 2、降低服务器压力。给网络资源设定有效期之后,用户可以重复使用本地的缓存,减少对源服务器的请求,间接降低服务器的压力。同时,搜索引擎的爬虫机器人也能根据过期机制降低爬取的频率,也能有效降低服务器的压力。 3、减少网络延迟,加快页面打开速度。带宽对于个人网站运营者来说是十分重要,而对于大型的互联网公司来说,可能有时因为钱多而真的不在乎。那Web缓存还有作用吗?答案是肯定的,对于最终用户,缓存的使用能够明显加快页面打开速度,达到更好的体验。 浏览器端的缓存规则 对于浏览器端的缓存来讲,这些规则是在HTTP协议头和HTML页面的Meta标签中定义的。他们分别从新鲜度和校验值两个维度来规定浏览器是直接使用缓存中的副本,还是需要去源服务器获取更新的版本。 1)新鲜度(过期机制):也就是缓存副本有效期

vue两种常见缓存策略的数据交互处理方案

情到浓时终转凉″ 提交于 2020-03-10 18:28:17
1 缓存形式说明 vue常使用的两种缓存策略,一种为vue的router中使用keep-alive,一种为使用vuex的store.两者对比见表格: 缓存策略 router中使用keep-alive vuex的store 用法 个人博客 官方博客 优点 1.比较灵活;<br>2.基本不需学习 1.方便统一管理数据;<br>2.多个router之间传输数据十分方便; 缺点 1.多个router之间数据传输较困难;<br>2.统一管理数据困难且效率低; 1.页面内部与input等内容交互时不方便,像v-model这样的语法糖需要拆开;<br>2.需要一定的学习过程和良好的设计理念; 适用场合 刚开始使用vue的新手(只需配置即可) 更高效管理通用数据的情况;<br>建议通过模块化使vuex的耦合性降到最低; 3 数据交互处理 以部门模块和需要选择部门的用户模块为例进行说明. 此处的数据交互问题包含两个问题: 在本地操作,当前模块的数据改变时(如增加部门),影响到另一模块的数据引用(此时再增加用户时选择的部门,如果只是单纯被缓存,则不会体现这种变化); 在本地操作,当前模块的数据改变时,影响另一个地点的数据引用; 问题二情景的自主实现必然需要后台的支持,更加复杂,本博客不予考虑.一般而言,这种情况建议用户直接刷新页面来解决问题二; 对于问题一,理论上可以仅通过前台实现自主产生影响