redis的过期策略和内存淘汰机制(redis篇)

分享并学习一下redis的过期策略和内存淘汰机制

在平时的工作或者学习中,即便自己没有实打实的用过redis。但是能有对这方面的思考,再结合一些实际场景和理论,那么我相信自己或者你都会越来越厉害的。

 首先,我们需要认清为啥redis要有过期策略?

如果这个点大家都不太清楚的话,建议先去了解了解redis的作用和redis怎么诞生的。

其实,理解起来很简单,大家只要记住。redis是基于内存的就行了,内存存储有限,所以存储数据时,会有一个过期时间考虑。

可能有同学会遇到,在生产环境的 Redis 经常会丢掉一些数据,写进去了,过一会儿可能就没
了。我的天,同学,你问这个问题就说明 Redis 你就没用对啊。 Redis 是缓存,你给当存储了是
吧?
啥叫缓存?用内存当缓存。内存是无限的吗,内存是很宝贵而且是有限的,磁盘是廉价而且是
大量的。可能一台机器就几十个 G 的内存,但是可以有几个 T 的硬盘空间。 Redis 主要是基于
内存来进行高性能、高并发的读写操作的。
那么redis的过期策略的核心思想是啥呢?
Redis 过期策略是: 定期删除 + 惰性删除
所谓 定期删除 ,指的是 Redis 默认是每隔 100ms 就随机抽取一些设置了过期时间的 key ,检查 其是否过期,如果过期就删除。
假设 Redis 里放了 10w key ,都设置了过期时间,你每隔几百毫秒,就检查 10w key ,那 Redis 基本上就死了, cpu 负载会很高的,消耗在你的检查过期 key 上了。注意,这里可不是每 隔 100ms 就遍历所有的设置过期时间的 key ,那样就是一场性能上的 灾难 。实际上 Redis 是每 隔 100ms 随机抽取 一些 key 来检查和删除的。
惰性删除:即便key过期了,但是redis不做任何操作。当下次访问时,检查如果过期,那么redis就把key数据删除。
但是实际上这还是有问题的,如果定期删除漏掉了很多过期 key,然后你也没及时去查,也就没走惰性删除,此时会怎么样?如果大量过期 key 堆积在内存里,导致 Redis 内存块耗尽了, 咋整?那就走内存淘汰机制

 内存淘汰机制:

1、noeviction: 当内存不足以容纳新写入数据时,新写入操作会报错,这个一般没人用吧。

2、 allkeys-lru :当内存不足以容纳新写入数据时,在 键空间 中,移除最近最少使用的 key (这
个是 最常用 的)。
3、 allkeys-random :当内存不足以容纳新写入数据时,在 键空间 中,随机移除某个 key ,这个
一般没人用吧,为啥要随机,肯定是把最近最少使用的 key 给干掉啊。
4、 volatile-lru :当内存不足以容纳新写入数据时,在 设置了过期时间的键空间 中,移除最近
最少使用的 key (这个一般不太合适)。
5、 volatile-random :当内存不足以容纳新写入数据时,在 设置了过期时间的键空间 中, 随机
移除 某个 key
6、 volatile-ttl :当内存不足以容纳新写入数据时,在 设置了过期时间的键空间 中,有 更早过
期时间 key 优先移除。
我觉得工作中记住常用的即可,面试的话最好都了解一下。

相关推荐

  1. redis过期策略内存淘汰机制redis

    2024-04-10 15:32:02       36 阅读
  2. Redis过期策略内存淘汰机制

    2024-04-10 15:32:02       48 阅读
  3. 深入了解Redis过期策略内存淘汰机制

    2024-04-10 15:32:02       40 阅读
  4. Redis过期清理策略内存淘汰机制

    2024-04-10 15:32:02       65 阅读
  5. Redis过期删除策略内存淘汰机制

    2024-04-10 15:32:02       42 阅读
  6. redis过期策略以及内存淘汰机制

    2024-04-10 15:32:02       47 阅读
  7. Redis过期策略以及内存淘汰机制

    2024-04-10 15:32:02       28 阅读
  8. Redis过期删除策略内存淘汰机制

    2024-04-10 15:32:02       23 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-10 15:32:02       75 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-10 15:32:02       80 阅读
  3. 在Django里面运行非项目文件

    2024-04-10 15:32:02       64 阅读
  4. Python语言-面向对象

    2024-04-10 15:32:02       75 阅读

热门阅读

  1. LeetCode-45. 跳跃游戏 II【贪心 数组 动态规划】

    2024-04-10 15:32:02       34 阅读
  2. 题目 2305: 等差数列

    2024-04-10 15:32:02       28 阅读
  3. 蓝桥杯之初等数论(一)

    2024-04-10 15:32:02       31 阅读
  4. PTA 三足鼎立

    2024-04-10 15:32:02       31 阅读
  5. 1354: 【C4】【搜索】【回溯】字母全排列

    2024-04-10 15:32:02       32 阅读
  6. 初识Linux:探索开源世界的大门

    2024-04-10 15:32:02       39 阅读
  7. 算法刷题day42

    2024-04-10 15:32:02       26 阅读
  8. Kotlin基础学习

    2024-04-10 15:32:02       35 阅读
  9. ORA-00257:archiver error.Connect internal only,until freed.

    2024-04-10 15:32:02       32 阅读
  10. ffmpeg视频转换 webp

    2024-04-10 15:32:02       34 阅读