侧边栏壁纸
博主头像
再见理想博主等级

只争朝夕,不负韶华

  • 累计撰写 112 篇文章
  • 累计创建 64 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

Redis过期策略及内存淘汰机制

再见理想
2022-05-27 / 0 评论 / 0 点赞 / 263 阅读 / 732 字

一,过期策略

定期删除

Redis默认每隔100ms随机抽取设置了过期时间的key,并对其进行检查,如果已经过期则删除。为什么是随机抽取? 因为如果存储了大量数据,全部遍历一遍是非常影响性能的!

惰性删除

每次获取key时会对key进行判断是否还存活,如果已经过期了则删除。如果一些键长期没有被访问,会造成内存泄露(垃圾数据占用内存)。

二,淘汰机制

在 Redis 中,允许用户设置最大使用内存大小 server.maxmemory,在内存限定的情况下是很有用的。譬如,在一台 8G 机子上部署了 4 个 Redis 服务点,每一个服务点分配 1G 的内存大小,减少内存紧张的情况,由此获取更为稳健的服务。

Redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。Redis 提供 6 种数据淘汰策略:

  • volatile-lru:(默认)淘汰已设置过期时间且最近最少使用的数据。
  • volatile-ttl:淘汰已设置过期时间且将要过期的数据。
  • volatile-random随机淘汰已设置过期时间中的任意数据。
  • allkeys-lru:淘汰所有key中最近最少使用的数据。(推荐)
  • allkeys-random:所有key中随机淘汰数据。
  • no-eviction:写入报错,不删除数据。

三,其它模块对过期键的处理

生成RDB文件时

执行SAVE或BGSAVE时 ,数据库键空间中的过期键不会被保存在RDB文件中。

载入RDB文件时

Master 载入RDB时,文件中的未过期的键会被正常载入,过期键则会被忽略。
Slave 载入RDB时,文件中的所有键都会被载入,当同步进行时,会和Master保持一致。

AOF文件写入时

已过期未被删除的键会被正常记录到AOF文件中,当过期键发生释放删除时,DEL 也会被同步到 AOF 文件中去。

重写rewrite AOF文件时

执行BGREWRITEAOF时,数据库键中过期的键不会被记录到AOF文件中。

复制

Master 删除过期Key之后,会向所有 Slave 服务器发送一个 DEL 命令,从服务器收到之后,会删除这些 Key。

Slave 在被动的读取过期键时,不会做出操作,而是继续返回该键,只有当Master 发送 DEL 通知来,才会删除过期键,这是统一、中心化的键删除策略,保证主从服务器的数据一致性。

0

评论区