如果有一天当你的Redis 内存满了,该怎么办?

本文探讨了当Redis内存满时的处理方法,包括增加Redis可用内存和设置内存淘汰策略。介绍了8种不同的内存淘汰策略,重点讨论了LRU和LFU的实现原理,并解释了Redis的TTL机制及其数据结构。此外,还讨论了Redis执行淘汰策略的不同时机,如定时删除、惰性删除和定期删除。
摘要由CSDN通过智能技术生成

简介

我们知道redis是一个非常常用的内存型数据库,数据从内存中读取是它非常高效的原因之一,那么但是如果有一天,「redis分配的内存满了怎么办」?遇到这个面试题不要慌,这种问题我们分为两角度回答就可以:

  • 「redis会怎么做」
  • 「我们可以怎么做」

增加redis可用内存

这种方法很暴力,也很好用,我们直接通过增加redis的可用内存就可以了, 有两种方式

  • 「通过配置文件配置」 //设置redis最大占用内存大小为1000M**
    maxmemory 1000mb**
    • 通过在redis安装目录下面的redis.conf配置文件中添加以下配置设置内存大小
  • 「通过命令修改」//设置redis最大占用内存大小为1000M
    127.0.0.1:6379> config set maxmemory 1000mb
    • redis支持运行时通过命令动态修改内存大小

这种方法是立竿见影的,reids 内存总归受限于机器的内存,也不能无限制的增长,那么如果没有办法再增加 redis 的可用内存怎么办呢?

内存淘汰策略

实际上Redis定义了**「8种内存淘汰策略」**用来处理redis内存满的情况:

  • 1.noeviction:直接返回错误,不淘汰任何已经存在的redis键2.allkeys-lru:所有的键使用lru算法进行淘汰3.volatile-lru:有过期时间的使用lru算法进行淘汰4.allkeys-random:随机删除redis键5.volatile-random:随机删除有过期时间的redis键6.volatile-ttl:删除快过期的redis键7.volatile-lfu:根据lfu算法从有过期时间的键删除8.allkeys-lfu:根据lfu算法从所有键删除

这些内存淘汰策略都很好理解,我们着重讲解一下lru,lfu,ttl是怎么去实现的

lru的最佳实践?

lru是Least Recently Used的缩写,也就是**「最近很少使用」**,也可以理解成最久没有使用。最近刚刚使用过的,后面接着会用到的概率也就越大。由于内存是非常金贵的,导致我们可以存储在缓存当中的数据是有限的。比如说我们固定只能存储1w条,当内存满了之后,缓存每插入一条新数据,都要抛弃一条最长没有使用的旧数据。我们把上面的内容整理一下,可以得到几点要求:

  • 「1.保证其的读写效率,比如读写的复杂度都是O(1)」
  • 「2.当一条数据被读取,将它最近使用的时间更新」
  • 「3.当插入一条新数据的时候,删除最久没有使用过的数据」

所以我们要尽可能的保证查询效率很高&#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值