当前位置:首页 » 硬盘大全 » 缓存失效时间多久
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

缓存失效时间多久

发布时间: 2022-02-28 15:38:06

‘壹’ java设置 redis 失效时间多久

EXPIRE命令返回1表示成功,返回0表示键值不存在或设置失败。
同时这里还有一个比较常用的命令是ttl,用于查看一个键还有多久时间会被删除。返回的是剩余时间(秒数)。
这里就不贴代码了,有一点需要说明的是,ttl命令在键不存在或被删除之后,会返回-2,在没有为键设置生存时间(即永久存在,建一个键之后的默认情况)时返回的是-1。大家可以亲自操作一把。
如果想要把一个设置过过期时间的键取消过期时间设置,则需要使用persist命令。
redis > SET session:27e7a id1234
OK
redis > EXPIRE session:27e7a 1200
(integer) 1
redis > TTL session:27e7a
(integer) 1092
redis > PERSIST session:27e7a
(integer) 1
redis > TTL session:27e7a
(integer) -1

这里需要说明一点的是,除了使用persist命令外,使用set、getset命令为键赋值,也会同时消除键的生存时间,如果需要可以重新使用expire命令为键设置生存时间。而其他对键的操作命令(如incr、lpush、hset、zrem)都不会影响键的生存时间。
expire命令的单位是秒,而且这个参数必须为整数,如果需要更精准的时间的话,需要使用pexpire命令设置,其单位为毫秒,同理也需要用pttl命令来看键的剩余毫秒数。当然使用expire命令设置的过期时间也是可以用pttl看键的剩余毫秒数的。
访问限制
有时候我们会有一个需求是需要限制一个用户对一个资源的访问频率,我们假定一个用户(用IP作为判断)每分钟对一个资源访问次数不能超过10次。
我们可以使用一个键,每次用户访问则把值加1,当值加到10的时候,我们设定键的过期时间为60秒,并且禁止访问。这时候下次访问发现值为10,则不让访问了,然后60秒后键被删除,这时候再次创建键。这样就可以解决,但是其实这样时间并不精准,问题还是挺大的。
我们还有一个方案:使用队列。前面的章节也说到了,使用列表类型可以用作队列。
我们设定一个队列rate.limiting.192.168.1.1(假定是这个IP),我们把每次的访问时间都添加到队列中,当队列长度达到10以后,判断当前时间与队列第一个值的时间差是否小于60,如果小于60则说明60秒内访问次数超过10次,不允许访问;否则说明可以访问,则把队列头的值删除,队列尾增加当前访问时间。
这种方法可以比较精准的实现访问限制,但是当限制的次数比较大时,这种方法占用的存储空间也会比较大。
缓存
有时候会把一些对CPU或IO资源消耗比较大的操作结果缓存起来,并设置一定时间的自动过期。比如我们设定一个微博外链的最热站点缓存放于新浪微博的首页,这样我们不可能每次访问都重新计算最热的外链站点,所以我们可以设定两小时更新一次。每次访问是判断这个键有没有,如果存在则直接返回,如果没有则通过计算把内容存入键中,并设定两小时的过期时间。
然而在很多场合这种方法会很恐怖,当服务器内存有限的时候,大量使用缓存切设置生存时间过长就会导致redis占用太多内存,而redis有时候会把系统内存都吃掉,导致系统崩溃。但是设置时间过短又会导致缓存的命中太低。
所以我们最好的办法是设定缓存的淘汰规则。这种方式比较适用于将redis用作缓存系统的时候比较好。
具体就是:修改配置文件中的maxmemory参数,限制redis的最大内存,当超出后会按照maxmemory-policy参数指定的策略删除不需要的键,直到redis占用的内存小于设定值。

‘贰’ 谁能告诉我C#中缓存的生命周期

缓存这个概念很广.
在Asp.Net环境下,页面,控件都可以设置输出缓存,并且可以设置过期时间.Asp.Net的HttpContext对象有个Cache属性,可以设置数据缓存,可以设置过期时间.可能你会用到一些第三方缓存库(比如微软的企业库)或者分布式缓存库(大名鼎鼎的Memcache),这些都是可以设置过期时间的.
在Windows应用程序下,由于没有了HttpContext对象,所有缓存机制得靠自己实现.

至于缓存的生命周期,输出缓存是一个绝对过期时间,超出该时间则缓存失效.数据缓存可以设置绝对过期时间和相对过期时间,在相对过期时间范围内没有访问该缓存,则失效,否则继续延长缓存期限.第三方缓存一般设计的是绝对过期时间.

在内存吃紧的时候,CLR会自动清理缓存已满足应用程序需要,这种特殊情况过期时间不一定靠谱.

‘叁’ Nginx缓存什么时候失效

location ~.*\.(js|css|html|png|jpg)$ 这个是设置类型
{
expires 3d;
}

expires 3d;//表示缓存3天
expires 3h;//表示缓存3小时
expires max;//表示缓存10年
expires -1;//表示永远过期。
如果设置为-1在js、css等静态文件在没有修改的情况下返回的是http 304,如果修改返回http 200
http 304:自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。
http 200:服务器已成功处理了请求,这表示服务器提供了请求的内容。
=======
如果不想让代理或浏览器缓存,加no-cache参数
add_header Cache-Control no-cache;
这样浏览器F5刷新时,返回的就是http 200,而不是http 304

‘肆’ 如何查询缓存时间

对于WEB地理信息系统来说,一个需要特别强调的是系统的响应速度,有许多方法来提高系统的速度,我们今天要提到的是利用缓存来提高系统的速度。例如在执行查询时,如果前后多次所查询的得到结果都相同,我们可以将第一次查询的结果放到内存中缓存中去,第二或第二次调用时,我们可以直接返回缓存的信息,节省了从地图服务器中查询的时间,从而提高了响应的效率。ASP.NET提供了强大的、便于使用的缓存机制,用于将需要大量服务器资源来创建的对象存储在内存中。缓存这些类型的资源会大大改进应用程序的性能。缓存是由Cache类实现的,缓存程序是每个应用程序专用的。缓存生存期依赖于应用程序的生存期,重新启动应用程序后,将重新创建Cache对象。设计Cache类是为了便于使用。可以将项放置在Cache中,并在以后使用简单的键/值对来检索这些项。Cache类提供了强大的功能,允许自定义如何缓存项以及将他们缓存多长时间。例如,当缺乏系统内存时,缓存会自动移除很少使用的或优先级较低的项以释放内存。该技术也成为清理,这是缓存确保过期数据不使用宝贵的服务器资源的方式之一。当执行清理时,可以只是Cache给予某些项比其他项更高的优先级。若要指示项的重要性,可以在使用Add或Insert方法添加项时,指定一个CacheItemPritory枚举值。当使用Add或Insert方法将项添加到缓存时,您还可以建立项的过期策略。可以通过使用DateTime值指定项的确切过期时间(绝对过期时间),来定义项的生存期。也可以使用TimeSpan值指定一个弹性过期时间,弹性过期时间允许根据项的上次访问时间来指定该项过期之前的运行时间。一旦项过期,便将它从缓存中移除。试图检索它的值的行为将返回null,除非该项被重新添加到缓存中。此为,ASP.NET允许根据外部文件、目录(文件依赖项)或另一个缓存项(键依赖项)来定义缓存项的有效性。如果具有关联依赖项的项发生更改,缓存项便会失效并从缓存中移除。可以使用该技术在项的数据源更改时从缓存中移除这些项。以下例子代码如何在查询时利用ASP.NET提供的缓存机制。首先在GetCallbackResult 方法的最前面加入如下代码,判断是否存在某一缓存,如果存在(第二次调用相同的操作),则直接将缓存结果返回,如果不存在(首次调用),则不影响程序的执行:// 判断是否有相应的缓存信息 string cachedResponse = Cache[callbackArg] as string; if (cachedResponse != null) { return cachedResponse; }然后在GetCallbackResult方法返回response字符串之前,加入如下代码,用于将查询结果保存到缓存中:TimeSpan cacheDuration = new TimeSpan(0, 0, 999999); Cache.Add(callbackArg, response, null, DateTime.Now.Add(cacheDuration), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.NotRemovable, null);上述代码通过Cache的Add方法将查询结果缓存起来。该方法的第一个参数是用于引用该项的缓存键;第二个参数是要添加到缓存的项;第三个参数表示文件依赖项或缓存键依赖项,当任何依赖项更改时,该对象即无效,并从缓存中移除。如果没有依赖项,则此参数为空引用;第四个参数是所添加对象将过期并从缓存中移除的时间。如果使用可调过期,则该参数必须为NoAbsoluteExpiration;第五个参数表示最后一次访问所添加对象时与该对象过期时之间的时间间隔。如果该值等效于20分钟,则该对象在最后一次被访问20分钟之后将过期并从缓存中移除。若果使用绝对过期,则该参数必须为NoSlidingExpiration;第六个参数是对象的相对的优先级,由CacheItemPriority枚举表示。缓存在退出对象时使用该值;具有较低优先级的对象在具有较高优先级的对象之前被从缓存移除;最后一个参数表示从缓存中移除对象时所调用的委托(如果提供)。当从缓存中删除应用程序的对象时,可使用它来通知应用程序。

‘伍’ 设置页面在失效前被缓存的时间是什么意思

你应该是说的页面缓存失效时间,比如你改了页面引入的js,刷新的时候并不会生效,因为实际上浏览的是缓存的页面,并没有载入新写的JS,缓存失效过了之后会重新读一遍就会把新写的js读进去了,这个一般都是项目和服务器配置,跟前端无关

‘陆’ 网页缓存的生命周期是多少

有很多理由去解释理解ASP.NET页面生命周期是非常重要的,主要是要去理解什么地方放置什么特定的方法,什么时候我们应该设置什么相关的属性。如果去开发自定义的服务器控件,理解生命周期对纠正控件初始化时候的错误,以及使用view-state和后台代码设置属性是非常有用的。(控件事件只与ASP.NET页面相关)

页面生命周期要看它是否是第一次请求,还是回发(本身页面请求),最后决定是否到Web服务器。当一个网页被Web服务器请求时,在回发到web浏览器之前,会经过一系列步骤/事件(如初始化,控件实例化,state的恢复和保存,执行事件处理代码,渲染)。

如果我们正确地使用和操作页面生命周期事件,它对web应用程序开发会是一个非常方便和强大的工具。

‘柒’ 缓存击穿互斥锁 设置锁的失效时间

  • 设置锁的失效时间是自己设置的,它的过期时间会很短,最长不超过五分钟

  • 缓存穿透是指查询一个一定不存在的数据

  • 由于缓存是不命中时被动写的,

  • 并且出于容错考虑,如果从存储层查不到数据则不写入缓存,

  • 这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。

  • 在流量大时,可能DB就挂掉了,

  • 要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。

  • 最常见的则是采用布隆过滤器

  • 将所有可能存在的数据哈希到一个足够大的bitmap中,

  • 一个一定不存在的数据会被 这个bitmap拦截掉,

  • 从而避免了对底层存储系统的查询压力。

  • 另外也有一个更为简单粗暴的方法

  • 如果一个查询返回的数据为空(不管是数 据不存在,还是系统故障),

  • 我们仍然把这个空结果进行缓存,但它的过期时间会很短,最长不超过五分钟

‘捌’ java缓存失效判断,缓存一般是存放在Hashtable中,并且有个失效时间。怎么判断这个时间。

用一个单独的线程,定时检查HashTable里的时间,过期就删除