zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

Redis 的过期策略都有哪些?内存淘汰机制都有哪些?手写一下 LRU 代码实现?

Redis内存代码 实现 机制 哪些 策略 过期
2023-09-27 14:23:02 时间

分析

如果你连这个问题都不知道,上来就懵了,回答不出来,那线上你写代码的时候,想当然的认为写进 Redis 的数据就一定会存在,后面导致系统各种 bug,谁来负责?常见的有两个问题:

  • 往 Redis 写入的数据怎么没了?

可能有同学会遇到,在生产环境的 Redis 经常会丢掉一些数据,写进去了,过一会儿可能就没了。我的天,同学,你问这个问题就说明 Redis 你就没用对啊。Redis 是缓存,你给当存储了是吧?

啥叫缓存?用内存当缓存。内存是无限的吗,内存是很宝贵而且是有限的,磁盘是廉价而且是大量的。可能一台机器就几十个 G 的内存,但是可以有几个 T 的硬盘空间。Redis 主要是基于内存来进行高性能、高并发的读写操作的。

那既然内存是有限的,比如 Redis 就只能用 10G,你要是往里面写了 20G 的数据,会咋办?当然会干掉 10G 的数据,然后就保留 10G 的数据了。那干掉哪些数据?保留哪些数据?当然是干掉不常用的数据,保留常用的数据了。

  • 数据明明过期了,怎么还占用着内存?
    这是由 Redis 的过期策略来决定。

Redis 过期策略

Redis 过期策略是:定期删除+惰性删除。

所谓定期删除,指的是 Redis 默认是每隔 100ms 就随机抽取一些设置了过期时间的 key,检查其是否过期,如果过期就删除。

假设 Redis 里放了 10w 个 key,都设置了过期