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

2021/11/26 19:11:55

本文主要是介绍redis过期策略,内存淘汰机制,java高级开发笔试题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!


定期删除 + 惰性删除

  • 定期删除:是指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集群,恢复数据。


这篇关于redis过期策略,内存淘汰机制,java高级开发笔试题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程