当前位置:首页 » 半夜时分 » 为什么要设置缓存失效时间

为什么要设置缓存失效时间

发布时间: 2022-08-09 12:40:45

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

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

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

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

‘贰’ 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占用的内存小于设定值。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

‘肆’ android有哪几种缓存方式,优缺点是什么

二级缓存工作机制。

1.所谓二级缓存实际上并不复杂,当Android端需要获得数据时比如获取网络中的图片,我们首先从内存中查找(按键查找),内存中没有的再从磁盘文件或sqlite中去查找,若磁盘中也没有才通过网络获取。

2.当获得来自网络的数据,就以key-value对的方式先缓存到内存(一级缓存),同时缓存到文件或sqlite中(二级缓存)。注意:内存缓存会造成堆内存泄露,所有一级缓存通常要严格控制缓存的大小,一般控制在系统内存的1/4。

3.网络中的数据是变化的,数据一旦放入缓存中,再取该数据就是从缓存中获得,这样岂不是不能体现数据的变化?在缓存数据时会设置有效时间,比如说30分钟,若超过这个时间数据就失效并释放空间,然后重新请求网络中的数据。

‘伍’ 请教nginx中fastcgi缓存过期时间,以及如何清理缓存的问题

nginx的缓存服务proxy_cache不能清除指定的URL缓存,只能设置URL过期时间,要清除指定URL可以用nginx第三方模块ngx_cache_purge。
nginx安装时需要将ngx_cache_purege加载进去。

‘陆’ Ie浏览器缓存的css文件多久失效

css是缓存文件,可以自行在浏览器里设置失效时间。
在浏览器中打开“工具internet选项”,对话框的中间位置,浏览历史记录,cookie的位置有删除和设置两个按钮,点击设置按钮,里面你可以设置缓存文件的大小,存在时间,还可以打开缓存文件目录。

‘柒’ redis需要设置过期时间吗

看需求吧,如果你缓存的数据是静态的,随着时间不会变化或者变化比较小,以后一直会用到,那就不用设置。但是如果缓存的数据具有时效新,或者是动态的,不停追加,那么最好设置或者自己定时删除,不然内存会撑爆的

‘捌’ redis 每一个缓存都需要设置过期时间么

将redis当做使用LRU算法的缓存来使用LRU是Redis唯一支持的回收方法。
maxmemory配置指令用于配置Redis存储数据时指定限制的内存大小。

‘玖’ 如何制定Redis过期策略

Redis是key-value数据库,我们可以设置Redis中缓存的key的过期时间。Redis的过期策略就是指当Redis中缓存的key过期了,Redis如何处理。

过期策略通常有以下三种:

  • 定时过期:每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即清除。该策略可以立即清除过期的数据,对内存很友好;但是会占用大量的CPU资源去处理过期的数据,从而影响缓存的响应时间和吞吐量。

  • 惰性过期:只有当访问一个key时,才会判断该key是否已过期,过期则清除。该策略可以最大化地节省CPU资源,却对内存非常不友好。极端情况可能出现大量的过期key没有再次被访问,从而不会被清除,占用大量内存。

  • 定期过期:每隔一定的时间,会扫描一定数量的数据库的expires字典中一定数量的key,并清除其中已过期的key。该策略是前两者的一个折中方案。通过调整定时扫描的时间间隔和每次扫描的限定耗时,可以在不同情况下使得CPU和内存资源达到最优的平衡效果。
    (expires字典会保存所有设置了过期时间的key的过期时间数据,其中,key是指向键空间中的某个键的指针,value是该键的毫秒精度的UNIX时间戳表示的过期时间。键空间是指该Redis集群中保存的所有键。)

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

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

热点内容
为什么微信头像显示别人的手机号 发布:2025-05-15 12:56:33 浏览:459
为什么电脑一上线就卡死 发布:2025-05-15 12:36:32 浏览:402
嘴巴想吞口水吞的不好为什么 发布:2025-05-15 12:36:28 浏览:428
为什么网聊对方总要加微信 发布:2025-05-15 12:33:13 浏览:127
男生为什么会在自己家呆一天 发布:2025-05-15 12:15:51 浏览:635
虚云为什么老是闭眼睛 发布:2025-05-15 12:10:56 浏览:725
为什么我晚上老勃起 发布:2025-05-15 12:05:16 浏览:218
oppo和小米为什么不能一键换机 发布:2025-05-15 12:03:59 浏览:458
为什么一咳嗽眼睛就能看见金星 发布:2025-05-15 11:57:40 浏览:322
运动手环为什么这么便宜 发布:2025-05-15 11:57:39 浏览:782