缓存

详细剖析强缓存和协商缓存

余生长醉 提交于 2020-03-05 16:14:53
Cache-control 1.public: 所有内容都将被缓存(客户端和代理服务器都可缓存) 。具体来说响应可被任何中间节点缓存,如 Browser <-- proxy1 <-- proxy2 <-- Server,中间的proxy可以缓存资源,比如下次再请求同一资源proxy1直接把自己缓存的东西给 Browser 而不再向proxy2要。 private:所有内容**只有客户端可以缓存,Cache-Control的默认取值。**具体来说,表示中间节点不允许缓存,对于Browser <-- proxy1 <-- proxy2 <-- Server,proxy 会老老实实把Server 返回的数据发送给proxy1,自己不缓存任何数据。当下次Browser再次请求时proxy会做好请求转发而不是自作主张给自己缓存的数据。 no-cache:客户端缓存内容**,是否使用缓存则需要经过协商缓存来验证决定。表**示不使用 Cache-Control的缓存控制方式做前置验证, 而是使用 Etag 或者Last-Modified字段来控制缓存 。需要注意的是,no-cache这个名字有一点误导。设置了no-cache之后, 并不是说浏览器就不再缓存数据,只是浏览器在使用缓存数据时,需要先确认一下数据是否还跟服务器保持一致。 no-store:所有内容都不会被缓存,即不使用强制缓存

memcache缓存服务器概念篇

你。 提交于 2020-03-05 15:44:23
1,memcache简介 mamcache是一套分布式的高速缓存系统,可以提高网站访问的速度,尤其是对于一些大型的公司或者频繁访问数据库的网站访问速度提升效果十分显著,memcache是一个开源免费的软件,memcache通过键值对的访问将数据缓存在内存当中,减少从后端数据读取数据的次数。 2,memcache分布式缓存系统 分布式: 将数据分散存储在不同服务器上。 缓存系统: 严格意义上来说,memcache不是一个nosql数据库,只是提供内存缓存功能系统,那怎么理解别人来说memcache是一个nosql数据库呢?关系型数据库是基于二维表来存放数据(事务,元祖,数据的持久性)等,最简单的理解就是数据在断电后不会丢失,非关系型数据库不使用sql语句来进行数据的查询而是基于key-value存储和读取数据的,所以又可以理解成nosql数据库了。 3,memcache和mysql区别 1)没有使用sql语句查询或存储数据; 2)memcache中没有mysql的表的概念,都是使用键值对来保存的; 3)memcache的数据保存在内存当中,数据读取速度快,数据断电丢失; 4,memcache分布式部署的原理 memcache虽然被称为“分布式缓存”,但是memcache本身完全不具备分布式的功能,memcache集群之间不会相互通信,所谓的“分布式”,完全依赖于客户端程序的实现

Redis Ehcached 都是干什么的

拈花ヽ惹草 提交于 2020-03-05 13:37:27
Redis 属于独立的运行程序,需要单独安装后,使用JAVA中的Jedis来操纵。因为它是独立,所以如果你写个单元测试程序,放一些数据在Redis中,然后又写一个程序去拿数据,那么是可以拿到这个数据的。 Ehcache 与Redis明显不同,它与java程序是绑在一起的,java程序活着,它就活着。譬如,写一个独立程序放数据,再写一个独立程序拿数据,那么是拿不到数据的。只能在独立程序中才能拿到数据。ehcache是Hibernate中默认的CacheProvider,直接在jvm虚拟机中缓存,速度快,效率高;但是缓存共享麻烦,集群分布式应用不方便。 缓存数据有两级:内存和磁盘,因此无需担心容量问题,提供Hibernate的缓存实现 。 Ehcache特点 1. 够快 Ehcache的发行有一段时长了,经过几年的努力和不计其数的性能测试,Ehcache终被设计于large, high concurrency systems. 2. 够简单 开发者提供的接口非常简单明了,从Ehcache的搭建到运用运行仅仅需要的是你宝贵的几分钟。其实很多开发者都不知道自己用在用Ehcache,Ehcache被广泛的运用于其他的开源项目 比如:hibernate 3.够袖珍 关于这点的特性,官方给了一个很可爱的名字small foot print ,一般Ehcache的发布版本不会到2M,V 2.2.3

LAMP 2.2 Apache配置静态缓存

♀尐吖头ヾ 提交于 2020-03-05 09:47:16
这里的静态文件指的是图片、js、css 等文件,用户访问一个站点,其实大多数元素都 是图片、js、css 等,这些静态文件其实是会被客户端的浏览器缓存到本地电脑上的,目的 就是为了下次再请求时不再去服务器上下载,这样就加快了速度,提高了用户体验。但这些 静态文件总不能一直缓存,它总有一些时效性,我们改就是这个过期时间,配置如下: <IfModule mod_expires.c> ExpiresActive on ExpiresByType image/gif "access plus 1 days" ExpiresByType image/jpeg "access plus 24 hours" ExpiresByType image/png "access plus 24 hours" ExpiresByType text/css "now plus 2 hour" ExpiresByType application/x-javascript "now plus 2 hours" ExpiresByType application/javascript "now plus 2 hours" ExpiresByType application/x-shockwave-flash "now plus 2 hours" ExpiresDefault "now plus 0 min" <

php防止重复提交问题总结

佐手、 提交于 2020-03-05 08:06:29
用户提交表单时可能因为网速的原因,或者网页被恶意刷新,致使同一条记录重复插入到数据库中,这是一个比较棘手的问题。我们可以从客户端和服务器端一起着手,设法避免同一表单的重复提交。 1.使用客户端脚本 提到客户端脚本,经常使用的是JavaScript进行常规输入验证。在下面的例子中,我们使用它处理表单的重复提交问题,请看下面的代码: <form method="post" name="register" action="test.php" enctype="multipart/form-data"> <input name="text" type="text" id="text" /> <input name="cont" value="提交" type="button" onClick="document.register.cont.value='正在提交,请等待...'; document.register.cont.disabled=true;document.the_form.submit();"> </form> 当用户单击“提交”按钮后,该按钮将变为灰色不可用状态。 上面的例子中使用OnClick事件检测用户的提交状态,如果单击了“提交”按钮,该按钮立即置为失效状态,用户不能单击按钮再次提交。 还有一个方法,也是利用JavaScript的功能,但是使用的是OnSubmit(

Spring Boot的缓存之旅(一)

独自空忆成欢 提交于 2020-03-05 03:44:31
使用Spring Cache 1.Spring Cache简介 Spring Cache是 Spring3.1以后引入的新技术。它井不像正常缓存那样存储数据, 其核心思想是这样的:当我们在调用一个缓存方法时,会把该方法参数和返回结果作为一个键值对存放在缓存 中,等到下次利用同样的参数来调用该方法时将不再执行该方法,而是直接从缓存中获取结果进行 返回,从而实现缓存的功能。 Spring Cache的使用和 Spring对于事务管理的使用类似,可以基于注 解使用或者基于XML配置方式使用。 2.基于注解学习Spring Cache 在 Spring中提供了3个注解来使用 Spring Cache,下面分别进行介绍。 ①@Cacheable 注解 :用于标记缓存,也就是对使用 @Cacheable注解的位置进行缓存。 Cacheable可以在方法或者类上进行标记,当对方法进行标记时,表示此方法支持缓存:当对类进行标记时, 表明当前类中所有的方法都支持缓存 在支持 Spring Cache的环境下,对于使用 a cacheable标记 的方法, Spring在每次调用方法前都会根据key查询当前 Cache中是否存在相同key的缓存元素, 如果存在,就不再执行该方法,而是直接从缓存中获取结果进行返回,否则执行该方法并将返回结果存入指定的缓存中。 在使用

可能感兴趣的计算机网络协议 -- CDN

本秂侑毒 提交于 2020-03-05 00:17:38
作者:opLW 漫长寒假,结束了毕业论文的初稿。最近闲来无事学了点Flutter,感觉多个内容同时学可能会比较有趣,然后就重新捡起了网络协议看起了《趣谈网络协议》和《计算机网络》,进一步完善了对计算机网络整体结构的认知,然后顺便记录下自己感兴趣的熟悉又陌生的协议。 参考文章: CDN是什么?使用CDN有什么优势? 目录 1. CDN简介 2. CDN获取资源的过程 3. CDN对不同类型资源的缓存策略 4. CDN的使用场景 1. CDN简介 CDN(Content Delivery Network,即”内容分发网络“)是将源站内容分发至最接近用户的节点,使用户可就近取得所需内容,提高用户访问的响应速度和成功率,解决因分布、带宽、服务器性能带来的访问延迟问题。如下图所示用户不直接从源站获取资源,而是从距离用户最优的边缘节点获取资源,以此来提高效率。 概念介绍 源站 使用CDN之前,用户真正想要访问的服务器。 边缘节点 边缘节点也称CDN节点、Cache节点等;是相对于网络的复杂结构而提出的一个概念,指距离最终用户接入具有较少的中间环节的网络节点,对最终接入用户有较好的响应能力和连接速度。其作用是根据不同的资源类型进行优化缓存,以此来提高网站访问的速度和质量。 2. CDN获取资源的过程 2.1 概要 使用CDN之前,我们通过源站的IP地址,从源站获取资源;使用CDN之后

Redis面试必知必会

廉价感情. 提交于 2020-03-04 20:22:00
1. 在项目中缓存是如何使用的? 结合自己的公司的项目, 回答以下问题: 项目哪里用了缓存? 为什么要用? 用了可能会带来什么问题? 怎么解决这些问题? 项目的缓存架构是怎么样的? 如果面试官没有问这些问题, 我们也要主动和面试官聊聊. 2. 为什么要在项目中用缓存? (1) 高性能 如果不使用缓存, 每次请求都有较大的延迟, 比如600ms, 而如果每次请求都走缓存, 可能2ms就搞定了. (2) 高并发 在高并发场景下, 比如秒杀之类的促销活动, 如果所有请求都直接查询数据库, 会导致数据库宕机, 这个时候就需要缓存来分担数据库的压力. 3. 用了缓存之后可能会带来什么问题? 如何解决? (1) 缓存与数据库双写不一致 我们先了解下最经典的缓存和数据库的读写模式: 读的时候先读缓存, 再读数据库. 如果缓存中没有, 则从数据库中读取数据写入缓存. 修改数据的时候, 先删除对应的缓存, 再更新数据库. (或者先更新数据库, 再删除缓存) 从上面这个读写模式中我们可以发现, 在修改数据的时候, 只会更新数据库, 而不会同步更新缓存, 缓存是下次读的时候再更新. 这样做的原因是更新缓存的代价比较大, 比如对于一些比较复杂的业务场景, 缓存数据可能涉及到多张表的查询计算, 同时这个缓存数据还不一定会被频繁的访问, 所以综合考虑, 修改数据的时候直接删除缓存,

如何通过软引用和弱引用提升JVM内存使用效率?

不打扰是莪最后的温柔 提交于 2020-03-04 17:22:29
引用类型:强引用(new),虚引用,软引用,弱引用 1.软引用(SoftReference) 如果一个对象只具有软引用,而当前虚拟机堆栈内存足够,那么垃圾回收器就不会回收它,反之就会回收这些软引用指向的对象。 2.弱引用(WeakReference)与软引用的区别 垃圾回收器一旦发现某块内存上只有弱引用,不管当前内存空间是否足够,那么都会回收这块内存。 2.通过软引用/弱引用提升内存性能 1)内存足够时,无需用软引用。 2)用缓存提升效率 先去缓存中查询,查询到返回;查询不到,去数据库中查询, 将获取内容存储在缓存,返回。 eg:软引用/弱引用做缓存 3)为什么不用强引用做缓存 强引用不能回收 来源: 51CTO 作者: Bighead0829 链接: https://blog.51cto.com/13678728/2475476