缓存的好处不用多说,可以想像,如果机器没有了缓存,那电脑的世界将会变成什么样的?
昨天,在做自动更新的时候,测出来一个问题,明明我上传新文件的版本是 1.0.2.2,但客户下载到的是1.0.1.0 的,在本机测试所下载的版本是1.0.2.2 ,让同事测试 1.0.2.2,这么一来,可能是缓存造成的问题,于是就让(我现在出差)以前的同事,同学,现在留在公司的同事,三个人来做一下测试。首先我上传一个新的文件,让他们都下载,我也下载,得到的是同一个文件,然后从服务器上把这个文件给删除,他们还能下载,我不能下载,因为我是内部网,所以访问的直接是真实的地址,访问时告诉我,文件找不到。这就证明缓存起作用了。如果更新太频繁的话,不同区域内的客户所下载到的就一定不是同一个文件了,所以会造成,看是更新成功,实际更新的还是原来版本的错误,可这里有一点疑问?自动更新有个配置文件,只有这个配置文件变化时,客户端才会下载文件,配置文件的格式是 xml ,只要这个配置文件一变化,客户端就能检测到,调用自动更新,但上传的更新文件,一般是 dll和 exe 格式的,这两种格式在网络的缓存机制上有什么区别?这是值得我们去区分的。
测试还在继续进行,过了大约15分钟后,朋友们都无法下载那个文件,哈哈,缓存失效了,为了测试缓存失效的时间,我们继续双做了一下测试,方法同上,准确测试出缓存失效的时间是15分钟,哈哈,自动更新的问题可以解决了,就是15分钟之前上传更新文件,然后再保存自动更新的配置文件。问题从理论上解决。
但,我按照以上的方法进行维护自动更新,
结果事实上不是如此,我在今天用自动更新的时候,且文件是昨天晚上上传的,一共上传5个文件,有4个已经变化了,还有一个没有变,这是为什么?
看来测试还要继续进行有以下两种情况没有考虑到缓存是否会发生变化
文件没有从服务器上删除的情况
1.xml. 或 txt 格式的文件,这里如果检查文件还存在,缓存会不会继续保留之前的内容?
2.dll . 或 exe 格式的文件,这里如果检查文件还存在,缓存会不会继续保留之前的版本?
20090607 下午
测试结果:xml 与 dll 的更新时间相同,为什么自动更新配置文件一保存,客户端就发现有了更新?
不管这个了,已经找到一个解决方案,具体方案请见评论中的解决方案二
在这里要谢谢帮我测试的朋友,还有给我提建议的同事。虽然最后的解决方法是那么的不复会一提,但仍非常感谢,特别是张斌
20090625 下午续:
使用解决方案二,从 6月7号到6.24 号自动更新除了网络状况不好的情况下没有造成因为缓存而更新到旧版本的事故,但好景不长,每次在上传的时候添加日期,这半个多月维护下来,服务器上光更新文件就占200多M,实在是一个让人害怕的数字,大家都知道Internet服务提供商都是有大小限制的,这样的作法是在极大的浪费空间,说了这么多好像全是废话,核心问题:如何解决,本人目前有三种解决方案
1.在添加的时候手工删除旧版本
2.在添加的时候用程序自动删除旧版本
3.写一个小程序,根据文件名自动删除
(方法1) 手工删除不太现实,因为更新太频繁了,几乎每天要更新2-5次,况且要远程连接到主机,又要用肉眼去比较,找出过期的更新文件删除之,麻烦...
(方法2) 自动删除,不是不想,但不知道如何用命令去删除服务器上的文件,
(方法3) 这个操作就较为简单一点,想删除的时候,运行一下程序就行了
目前本人:使用1,来删除过期的更新文件
希望大家能再次提出宝贵意见,
更希望能得到另外一套完整的自动更新机制
能解决上述问题
能解决网络慢,下载更新文件失败的纠正方法
相关推荐
【Redis缓存机制】缓存更新、缓存穿透、缓存雪崩、缓存击穿
当缓存区缓存了用户信息后,客户端就都会从redis中访问读取数据了。而如果这时候用户更新了数据库中的值,就会导致数据库存储的数据与redis存储数据不一致,在这之后进行读写操作就会发生各种意想不到的错误了因此,当我们要对数据库数据进行更新时,也要尽可能让edis中的数据也能跟着变化,避免用户读到错误的信息缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样每次查询缓存都不会命中,最后都会对数据库进行查询。就像是缓存被穿透了一样,每次请求都会直接到达数据库。
代码冲突出现的原因,以及解决方法
Idea中使用git拉取代码的时候,代码冲突出现的原因,以及解决方法
带你搞明白什么是缓存穿透、缓存击穿、缓存雪崩
对缓存穿透和缓存击穿总是模棱两可?不明白什么是缓存雪崩?没关系,这篇文章将让你一次性搞明白什么是缓存穿透、什么是缓存击穿、什么是缓存雪崩,上万字总结,建议收藏。
缓存失败了怎么办?
我们创建一个重试表,表中有个字段记录重试次数,初始值为0,同时设置一个最大的重试次数,用一个定时任务异步的去读取重试表中的数据,然后去执行删除缓存操作,每删除一次,重试次数加1,如果其中有任意一次成功了,则返回成功。但是呢,这种方案还会出现删除失败的情况,因为基于binlog实现的删除只会删除一次,所以我们最终还是需要依赖于基于定时任务或者mq的重试机制。mq消费者读取mq消息,重试5次删除缓存。当然,如果你在接口中直接同步重试,该接口并发量比较高的时候,可能有点影响接口性能,这个我们不怕,可以改为异步。
缓存更新机制
缓存数据的更新机制 1.先更新数据库,再删缓存 ---最常用的 2.先更新数据库,再更新缓存 3.先更新缓存,在更新数据库 4.先删缓存,再更新数据库 5.写回。更新数据的时,只更新缓存不更新数据库。缓存异步更新到数据库 各种方式的优缺点 一个更新一个查询,更新后删除缓存后未及时更新到库中,另一个发起的查询,没有命中缓存,从而去库中查询,而库中的数据为更新前的数据,读取到的是旧数据。 先更新库后删除缓存,更新库成功后让缓存失效,读操作先读缓存,命中就返回,无法命中就读数据库,读到
简述三种缓存失败场景及解决方案
个人公众号,欢迎关注下:小蜗牛会飞 简述三种缓存失败场景及解决方案简述三种缓存失败场景及解决方案https://mp.weixin.qq.com/s/pxtOcnZ04z_2UCSnVfaYNw 这次我们来聊聊Redis的一些知识点,这个知识点也是在面试当中经常被问到,所以特此记录下。在我们的开发中,为了性能方面的考虑,我们第一时间都会想到用缓存,而我们用的最多的就是Redis。如有错误,欢迎指出。闲话不说,干起来 一:Redis为什么快? 其中有几点原因: 1.数据存储在内存中,...
python3 自动更新的缓存类
首先,需要定义一个用于生成或更新缓存数据的函数。这个函数可以是任何耗时的操作,例如从数据库查询、计算复杂结果等。路由时,总是能得到缓存中的数据,而缓存会在后台自动更新,不会因为更新缓存而导致请求超时。这个类会在后台自动更新缓存数据,你只需要调用方法来获取数据即可。类,并设置缓存更新周期。方法即可获取缓存数据。将数据生成函数传递给。
【Python3】装饰器 自动更新缓存
程序启动即从外部数据源加载数据到缓存;周期性、自动地刷新缓存中的数据;在任意时间调用时都能快速获取最新数据,而无需阻塞或消耗额外时间。
用于防止缓存击穿的自动更新缓存注解-StrongCacheUtil
用于防止缓存击穿的自动更新缓存注解-StrongCacheUtil介绍使用1.添加依赖2.开启aop3.配置redis4.添加工具类5.方法上添加注解注解中各参数实现原理 介绍 用于防止缓存击穿的自动更新缓存注解,打上注解的方法只需要在其中实现查库逻辑返回数据即可,配合Spring官方的cache注解的@CacheEvict()达到保证缓存一致性的同时更新缓存(非强一致性)。demo和工具类:https://github.com/ZGOD9527/StrongCacheUtil 使用 添加依赖-开启aop-
如何在Java中实现实时数据同步与缓存自动更新机制
通过消息队列和Spring Cache的结合,您可以在Java应用中实现高效的实时数据同步和缓存自动更新机制。消息队列确保数据在系统之间实时同步,而缓存自动更新机制则确保缓存中的数据保持最新状态。在现代应用中,实时数据同步和缓存自动更新是确保系统一致性和响应速度的重要机制。通过实现高效的数据同步和缓存更新机制,可以极大提升应用的性能和用户体验。本文将深入探讨在Java中如何实现这些机制,提供具体的实现方法和代码示例。将实时数据同步和缓存自动更新结合起来,您可以使用消息队列触发缓存更新。
如何禁止Cursor自动更新的详细设置办法
搜索发现网络上是有一些禁止自动更新的教程的,但都失效了。(1)如果你只是进行了2.1-2.4的步骤,那么你只是表面禁止了Curosr的自动更新,实际上当你关闭Cursor编辑器后,它还是会自动检测是否有新版本更新,并且会进行自动更新。进入到Cursor配置页面之后,进入到General的配置页面,然后向下查找,就可以找到Editor的配置选项,打开其中的Open editor settings的配置。(2)上面的一些步骤中涉及到删除文件的操作,为防止Cursor出现崩溃的现象,请务必做好相应的备份!
如何解决前端上线之后,用户所在页面不刷新也会自动更新
当前所在页面不刷新会出现其他页面已经更新但当前页面没有更新的情况。这种情况下,通常需要通过前端代码来处理。一种解决办法是在前端代码中,添加一个定时器,定期去检查后台服务是否有更新。如果检测到新版本,可以使用 JavaScript 程序重新加载相应的资源,让用户可以获得新内容。
SpringBoot 2.x 使用Redis作为缓存 设置有效时间及自动更新策略
本文基于Springboot2.0.4 Caused by: java.lang.ClassNotFoundException: org.apache.commons.pool2.impl.GenericObjectPoolConfig at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[na:1.8...
dedecms发布文章后自动更新首页及文章列表缓存
转载:http://blog.sina.com.cn/s/blog_8ee77fe701019qnf.html dedecms发文章不自动更新首页也列表页解决办法如下:登陆dedecms后台,找到“系统”“系统基本参数”“性能选项”,把“发布文章后马上更新网站主页”和“发布文章后马上更新相关栏目”单选框选为【是】即可。(如下图)多说一句:再“更新系统缓存”、“一键更新网站”把之前没更新的更新下,...
ubuntu禁止自动更新设置
从CentOS变更到uBuntu或多或少会遇到一些坑,今天分享一个。在Ubuntu系统中,自动更新是一个既方便又引发争议的功能。它可以帮助用户保持系统的最新状态,但有时也会因为自动更新而导致系统不稳定或不兼容。Ubuntu系统的自动更新主要通过两个配置文件来控制:10periodic和20auto-upgrades。这两个文件位于/etc/apt/apt.conf.d/目录下,它们共同决定了系统的自动更新行为。
nginx配置自动更新dns缓存
nginx配置自动更新dns缓存
一文彻底弄懂并解决Redis的缓存雪崩,缓存击穿,缓存穿透
缓存雪崩是指在某一时刻,大量缓存同时失效,导致大量请求直接打到数据库层,造成数据库压力骤增,甚至可能导致数据库崩溃、系统不可用的情况。缓存击穿是指缓存中存储的某个热点数据在某一时刻失效,大量并发请求同时去访问这个热点数据,导致所有请求打到数据库,造成数据库压力骤增的情况。缓存穿透是指恶意用户或程序请求查询的数据在缓存和数据库中都不存在,导致每次请求都会直接打到数据库,绕过缓存。由于缓存没有存储该请求的结果,所有这类请求都会绕过缓存,直接访问数据库,从而导致数据库承受巨大的压力。
3187




被折叠的 条评论
为什么被折叠?



