Blage's Coding Blage's Coding
Home
算法
  • 手写Spring
  • SSM
  • SpringBoot
  • JavaWeb
  • JAVA基础
  • 容器
  • Netty

    • IO模型
    • Netty初级
    • Netty原理
  • JVM
  • JUC
  • Redis基础
  • 源码分析
  • 实战应用
  • 单机缓存
  • MySQL

    • 基础部分
    • 实战与处理方案
    • 面试
  • ORM框架

    • Mybatis
    • Mybatis_Plus
  • SpringCloudAlibaba
  • MQ消息队列
  • Nginx
  • Elasticsearch
  • Gateway
  • Xxl-job
  • Feign
  • Eureka
  • 面试
  • 工具
  • 项目
  • 关于
🌏本站
🧸GitHub (opens new window)
Home
算法
  • 手写Spring
  • SSM
  • SpringBoot
  • JavaWeb
  • JAVA基础
  • 容器
  • Netty

    • IO模型
    • Netty初级
    • Netty原理
  • JVM
  • JUC
  • Redis基础
  • 源码分析
  • 实战应用
  • 单机缓存
  • MySQL

    • 基础部分
    • 实战与处理方案
    • 面试
  • ORM框架

    • Mybatis
    • Mybatis_Plus
  • SpringCloudAlibaba
  • MQ消息队列
  • Nginx
  • Elasticsearch
  • Gateway
  • Xxl-job
  • Feign
  • Eureka
  • 面试
  • 工具
  • 项目
  • 关于
🌏本站
🧸GitHub (opens new window)
  • Redis基础

  • 源码分析

    • 数据结构
    • Redis网络模型
    • 内存策略
      • 过期策略
      • 淘汰策略
      • 解决Redis内存饱和
    • 优化
  • 实战应用

  • 单机缓存

  • Redis
  • 源码分析
phan
2023-05-15
目录

内存策略

# 内存策略

# 过期策略

expire设置过期TTL

在Redis数据库结构体中,有两个字典Dict结构保存键值对,一个用来记录key-value,另一个用来记录key-TTL。

惰性删除:当一个key的TTL到期后,并不是立刻删除,而是在访问key时检查它的存活时间,过期才执行删除。问题:如果不去访问那么就永远不会删除

周期删除:通过定时任务,周期性的抽样部分过期key进行删除。

# 淘汰策略

内存达到设置的阈值,Redis主动挑选部分key删除以释放更多内存。Redis会在任何命令执行之前进行内存检查。

淘汰策略:allkeys—针对所有字典中的所有keys。volatile—针对所有设置了过期时间TTL的key

lru:每个key上次被访问的时间距离现在越久,被淘汰的优先级越高。

lfu:每个key被访问的频率越少,被淘汰的优先级越高。计数器随着访问次数增加,加一的概率逐渐降低。

根据淘汰策略,池子按照升序排列,值越大的淘汰的优先级越高。(now-LRU,255-LFU,maxTTL-TTL)

# 解决Redis内存饱和

1.使用内存淘汰策略,常见的淘汰算法有FIFO,LRU,LFU(数据引用次数最小的淘汰,是一种全局的算法,不关注短期是否被使用)

2.惰性过期:过期的数据被再次访问时,才判断是否过期并进行删除。缺点在于极端情况下过期数据会占据大量内存,而不被删除释放。

定期过期:每隔一段时间,CPU扫描内存删除过期数据。

编辑 (opens new window)
#Redis
上次更新: 2023/12/15, 15:49:57
Redis网络模型
优化

← Redis网络模型 优化→

Theme by Vdoing | Copyright © 2023-2024 blageCoder
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式