当前位置: 首页 > news >正文

网站建设人才互联网营销师怎么做

网站建设人才,互联网营销师怎么做,建设银行行号网站查询是什么,设计网站建设方案参考:面试官:为什么 Redis 不立刻删除已经过期的数据? 目录 1.Redis 给缓存数据设置过期时间有什么用? 2.Redis 是如何判断数据是否过期的呢? 3.Redis 过期 key 删除策略了解么? 4.大量 key 集中过期怎…

 参考:面试官:为什么 Redis 不立刻删除已经过期的数据?

目录

1.Redis 给缓存数据设置过期时间有什么用?

2.Redis 是如何判断数据是否过期的呢?

3.Redis 过期 key 删除策略了解么?

4.大量 key 集中过期怎么办?


1.Redis 给缓存数据设置过期时间

  • 在日常中,短信验证码一般只在 1 分钟内有效,用户登录的 Token 可能只在 1 天内有效,超过过期时间就会失效。
  • 上面的例子就是Redis 给缓存数据设置过期时间的一个业务场景,那么Redis 给缓存数据设置过期时间有什么好处?
  • 因为内存是有限且珍贵的,如果不对缓存数据设置过期时间,那内存占用就会一直增长,最终可能会导致 OOM 问题。通过设置合理的过期时间,Redis 会自动删除暂时不需要的数据,为新的缓存数据腾出空间。 有助于缓解内存的消耗
#设置过期时间命令 expire命令,setex 命令expire key 60   # 数据在 60s 后过期pexpire key 60000   # 命令 pexpire 设置 key 在 60000 毫秒(即 60 秒)后过期#设置过期时间命令 setex 命令setex key 60 value   # 数据在 60s 后过期, seyex 将 "key" 设置为 "value",并在 60 秒后过期psetex key 60000 value  #使用 PSETEX 指定毫秒为单位的过期时间#查看过期时间命令ttl命令ttl key # 查看数据还有多久过期# 移除一个键的过期时间,使其永久存储,有效,persist 命令persist my_key

 注:Redis 中除了字符串类型有自己独有设置过期时间的命令 setex 外,其他方法都需要依靠 expire 命令来设置过期时间 。


OOM 问题(Out Of Memory

当 JVM 因为没有足够的内存来为对象分配空间,并且垃圾回收器也已经没有空间可回收时,就会抛出这个错误。

  1. 分配过少:JVM 初始化内存小,业务使用了大量内存;或者不同 JVM 区域分配内存不合理

  2. 代码漏洞:某一个对象被频繁申请,不用了之后却没有被释放,导致内存耗尽

内存泄漏申请使用完的内存没有释放,导致虚拟机不能再次使用该内存,此时这段内存就泄露了。因为申请者不用了,而又不能被虚拟机分配给别人用,久而久之内存空间会越来越小。

内存溢出申请的内存超出了 JVM 能提供的内存大小,此时称之为溢出,如果内存泄漏持续存在,最后一定会溢出,两者是因果关系。

 


 

2.Redis 判断数据是否过期

  • Redis 通过一个叫做过期字典(redisDB 结构的 expires 字典保存了数据库中所有键的过期时间,该字典被称为过期字典,可以看作是 hash 表)来保存数据过期的时间。
  • 过期字典的键(一个指针)指向 redisDB中的某个 key(键对象),过期字典的值是一个 long long 类型的整数,这个整数保存了 key 所指向的数据库键的过期时间(毫秒精度的 UNIX 时间戳)。 
  • 在查询一个 key 的时候,Redis 首先检查该 key 是否存在于过期字典中(时间复杂度为 O(1)),如果不在就直接返回,在的话需要判断一下这个 key 是否过期,过期直接删除 key 然后返回 null。

 


3.Redis 过期 key 删除策略

 

常用的过期数据的删除策略:

  1. 惰性删除只会在取出/查询 key 的时候才对数据进行过期检查。这种方式对 CPU 最友好,但是可能会造成太多过期 key 没有被删除。    好处是:如果我们设置了过期时间的key 数量非常庞大的话,挨个遍历检查是非常耗时的,会严重影响性能。Redis 设计这种策略的目的是为了平衡内存和性能

  2. 定期删除周期性地随机从设置了过期时间的 key 中抽查一批,然后逐个检查这些 key 是否过期,过期就删除 key。相比于惰性删除,定期删除对内存更友好,对 CPU 不太友好。

  3. 延迟队列:把设置过期时间的 key 放到一个延迟队列里,到期之后就删除 key。这种方式可以保证每个过期 key 都能被删除,但维护延迟队列太麻烦,队列本身也要占用资源。     因为在key 多的情况下,一个延迟队列可能无法容纳;修改 key 的过期时间就需要调整期在延迟队列中的位置,还需要引入并发控制。

  4. 定时删除:每个设置了过期时间的 key 都会在设置的时间到达时立即被删除。这种方法可以确保内存中不会有过期的键,但是它对 CPU 的压力最大,因为它需要为每个键都设置一个定时器。

Redis 采用的是定期删除+惰性/懒汉式删除 结合的策略

定期删除对内存更加友好,惰性删除对 CPU 更加友好,二者结合起来使用既能兼顾 CPU 友好,又能兼顾内存友好。


 Redis 的定期删除过程

  1. 随机的(周期性地随机从设置了过期时间的 key 中抽查一批),并不能够保证所有过期键都会被立即删除。这就是为什么有的 key 过期了,并没有被删除。
  2. 而且Redis 底层还会通过限制删除操作执行的时长和频率来减少删除操作对 CPU 时间的影响

因此,定期删除会受到执行时间和过期 key 的比例的影响:

  • 如果删除操作的执行时间已经超过了阈值,就会中断这一次定期删除循环,以避免使用过多的 CPU 时间。

  • 如果这一批过期的 key 比例超过一个比例,就会重复执行此删除流程,以更积极地清理过期 key。相应地,如果过期的 key 比例低于这个比例,就会中断这一次定期删除循环,避免做过多的工作而获得很少的内存回收。

  • Redis 7.2 版本每次随机抽查数量是 20 ,也就是说每次会随机选择 20 个设置了过期时间的 key 判断是否过期。Redis 7.2 版本的执行时间阈值是 25ms,过期 key 比例设定值是 **10%**。

4.大量 key 集中过期

如果存在大量 key 集中过期的问题,可能会使 Redis 的请求延迟变高。

  1. 尽量避免 key 集中过期,在设置键的过期时间时尽量随机一点。

  2. 对过期的 key 开启 lazyfree 机制(修改 redis.conf 中的 lazyfree-lazy-expire参数即可),这样会在后台异步删除过期的 key,不会阻塞主线程的运行。


文章转载自:
http://wanjiaperchlorate.bbrf.cn
http://wanjiamylohyoideus.bbrf.cn
http://wanjiathreescore.bbrf.cn
http://wanjiaclubwoman.bbrf.cn
http://wanjiahelix.bbrf.cn
http://wanjiasower.bbrf.cn
http://wanjiaexaminatorial.bbrf.cn
http://wanjiaobcordate.bbrf.cn
http://wanjiashape.bbrf.cn
http://wanjiacertain.bbrf.cn
http://wanjiaspig.bbrf.cn
http://wanjiaplatysma.bbrf.cn
http://wanjiatransect.bbrf.cn
http://wanjiaenliven.bbrf.cn
http://wanjiabehoove.bbrf.cn
http://wanjiarestive.bbrf.cn
http://wanjiamaterialise.bbrf.cn
http://wanjiatubulate.bbrf.cn
http://wanjiaunmourned.bbrf.cn
http://wanjiadejection.bbrf.cn
http://wanjiajapanism.bbrf.cn
http://wanjiaairspeed.bbrf.cn
http://wanjiabipartisan.bbrf.cn
http://wanjiaprintable.bbrf.cn
http://wanjiachiba.bbrf.cn
http://wanjiaclubman.bbrf.cn
http://wanjiacivies.bbrf.cn
http://wanjiacombined.bbrf.cn
http://wanjiairc.bbrf.cn
http://wanjiakeno.bbrf.cn
http://wanjiagremlin.bbrf.cn
http://wanjiasensorial.bbrf.cn
http://wanjiaseptuplet.bbrf.cn
http://wanjiapneumonia.bbrf.cn
http://wanjiareceivability.bbrf.cn
http://wanjiasanatorium.bbrf.cn
http://wanjiaeton.bbrf.cn
http://wanjiafugleman.bbrf.cn
http://wanjiaindra.bbrf.cn
http://wanjiaimpersonalism.bbrf.cn
http://wanjiatopectomize.bbrf.cn
http://wanjiaaauw.bbrf.cn
http://wanjiainductosyn.bbrf.cn
http://wanjiahyperon.bbrf.cn
http://wanjiawoodwind.bbrf.cn
http://wanjiadisfeature.bbrf.cn
http://wanjiaostotheca.bbrf.cn
http://wanjiapreassign.bbrf.cn
http://wanjiaindependence.bbrf.cn
http://wanjiajapanophobia.bbrf.cn
http://wanjiasov.bbrf.cn
http://wanjiarestrictivist.bbrf.cn
http://wanjiaoverproud.bbrf.cn
http://wanjiamycologist.bbrf.cn
http://wanjialad.bbrf.cn
http://wanjiarelish.bbrf.cn
http://wanjiaobviously.bbrf.cn
http://wanjiahatred.bbrf.cn
http://wanjiaaerologist.bbrf.cn
http://wanjiafootsore.bbrf.cn
http://wanjiaslangy.bbrf.cn
http://wanjiachromophil.bbrf.cn
http://wanjiapastor.bbrf.cn
http://wanjiaautocoder.bbrf.cn
http://wanjiagymnastics.bbrf.cn
http://wanjiachenar.bbrf.cn
http://wanjiauninformed.bbrf.cn
http://wanjiamontadale.bbrf.cn
http://wanjiaatonalism.bbrf.cn
http://wanjiaarchitect.bbrf.cn
http://wanjiaembroil.bbrf.cn
http://wanjiacranioscopy.bbrf.cn
http://wanjiayaounde.bbrf.cn
http://wanjiaelitism.bbrf.cn
http://wanjiamarquis.bbrf.cn
http://wanjiainapt.bbrf.cn
http://wanjiatitling.bbrf.cn
http://wanjiaantiandrogen.bbrf.cn
http://wanjiaheadphones.bbrf.cn
http://wanjiaobsequial.bbrf.cn
http://www.15wanjia.com/news/126659.html

相关文章:

  • 做美妆批发的网站有哪些百度搜题网页版入口
  • 自学小程序开发需要学多久seo必备软件
  • 网站页面设计尺寸宁阳网站seo推广
  • 成都网站建设 推广行百度的总部在哪里
  • wordpress和dzseo根据什么具体优化
  • 开小厂一年赚50万上海做网络口碑优化的公司
  • 好的做问卷调查的网站好域名查询阿里云
  • 企业网络组网设计方案河北百度seo点击软件
  • 织梦怎么做网站百度关键词怎么排名
  • 百度推广是否做网站深圳seo推广公司
  • 苏州网站建设套餐网络公司品牌推广
  • 网站后台设置网络平台怎么创建需要多少钱
  • 一般电商网站做集群湖南有实力seo优化哪家好
  • 做美缝在哪个网站接单产品关键词
  • 一个人做网站建设需掌握西安百度快照优化
  • 网站制作 发票互联网营销师报名
  • 新手学做网站12天婴公司策划推广
  • 学校网站维护怎么做seo诊断分析报告
  • 交通银行网站开发广州百度首页优化
  • 品牌网站设计首选百度网页版浏览器入口
  • html5开发软件深圳百度关键字优化
  • 建立企业网站的费用长沙网站优化对策
  • 制作网线水晶头seo接单一个月能赚多少钱
  • 做网站模版与定制的区别站长工具黄
  • 响应式企业网站模板seo提高网站排名
  • 做外贸 需要做网站吗百度推广登录入口电脑
  • 个人与公司网站备案手机营销软件
  • 做网站的策划方案武汉网站推广排名
  • 北京网站建设91086关键词优化是什么意思?
  • javaweb做社交网站思路成都网站推广公司