ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

redis过期策略,内存淘汰机制,java高级开发笔试题

2021-11-26 12:33:16  阅读:135  来源: 互联网

标签:缓存 java 删除 过期 redis 内存 key



定期删除 + 惰性删除

  • 定期删除:是指redis默认每100ms就随机检查设置了过期时间的key,如果过期就删除。假设redis中有10w条key设置了过期时间,每隔几百毫秒就检查这10w个key,cpu负载太高了,redis可能就会挂掉。实际上是随机抽取这10w个中的某些key进行检查删除。
  • 惰性删除:若这10w条数据中有的过期了,而没被redis删除,那么当下次获取这个key的时候,redis会先检查这个key是否过期,若过期就删除该key,返回null

当要过期的key没有经过惰性删除删除掉,或者长期保存的key大量积压在内存,导致redis内存耗尽,该怎么办


redis为提供了内存淘汰机制,若redis占用过多的内存,此redis本身会进行内存淘汰。删除一些key给内存腾地儿。

  • noeviction:当内存不足以容纳新的key插入时,就会插入报错。
  • allkeys-lru:当内存不足时,在键空间中,移除最近最少使用的key(常用)
  • al

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

lkeys-random:随机删除key

  • volatile-lru:删除设置了过期时间且最少使用到的key
  • volatile-random:随机删除设置了过期时间的key
  • volatile-ttl:删除设置了过期时间中快要过期的key

redis的高并发和高可用,redis的主从复制


单机redis并发量QPS最多也就几万吧,简单的k v形式,读写分离,缓存写相对于读会少很多。 主从复制 - maste slave可水平扩容 请求量增加,增加slave即可。

注意:

  • master必须要有持久化机制,若没有,宕机重启时,就会把其他的salve也置空。
  • master及时备份,如果本地的数据丢失,就可以把备份的rdb去恢复master中的数据,重启master就会重新加载备份的数据。

redis持久化方式有哪几种?各有那些优缺点


  • RDB(存储的是数据) :客户端发出写入数据时 在指定的时间内 将内存中的数据集快照(当前数据)写入磁盘 生成RDB文件, 它恢复时是将快照文件直接读取到内存中。 ROB比AOF更加高效,节省空间,但是ROB的缺点是最后一次持久化的数据可能会丢失。
  • AOF(存储的是指令):以日志的形式记录每个写操作。

缓存雪崩


避免同一时间大量的key同时过期,分布设置key的过期时间。

若redis宕机,避免雪崩如下

  • 事前:建立一个高可用架构的redis集群
  • 事中:数据缓存之前可以结合本地缓存,ehcache 本地缓存+ 限流组件(hystrix),发生雪崩后,开启限流组件,每秒只允许少部分请求请求数据库,其他的请求调用我们写好的降级组件返回一些默认值或其他友情提示。
  • 事后:在redis开启持久化的前提下,重启redis集群,恢复数据。

标签:缓存,java,删除,过期,redis,内存,key
来源: https://blog.csdn.net/m0_64383736/article/details/121557274

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有