前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis 缓存淘汰策略

Redis 缓存淘汰策略

作者头像
柳公子
发布2021-01-21 05:35:13
8810
发布2021-01-21 05:35:13
举报
文章被收录于专栏:PhpZendo

Redis 缓存淘汰策略

如何估算缓存容量大小

「二八定律」:百分之八十的访问会落到百分之二十的热点数据上

内存容量建议设置在总数据量的 15%~30%

Redis 设置最大缓存容量:

代码语言:javascript
复制
config set maxmemory 4gb

Redis 缓存淘汰策略

8 中淘汰策略:

  • 1 种不进行淘汰策略: noeviction
  • 7 种进行淘汰策略,按照是否设置过期时间,进行数据集淘汰进行分类
    • 有设置过期时间: volatile-random, volatile-ttl, volatile-lru, volatile-lfu 在设置了过期时间的数据集中进行淘汰
    • 未设置过期时间: allkeys-random, allkeys-lru, allkeys-lfu 进行全局数据范围淘汰

noeviction 不进行数据淘汰

当 Redis 缓存使用超过 maxmemory,不进行数据淘汰,同时 Redis 不在提供写服务。一般不使用这个配置策略。

volatile-random, volatile-ttl, volatile-lru, volatile-lfu 在设置了过期时间的键值对进行数据淘汰

当缓存写满或数据过期时,进行数据淘汰

  • volatile-ttl 按照过期时间的先后顺序进行数据删除
  • volatile-random 在设置过期时间的数据集中随机删除
  • volatile-lru 依据 LRU 算法筛选过期时间数据进行删除
  • volatile-lfu 依据 LFU 算法筛选过期时间数据进行删除

allkeys-random, allkeys-lru, allkeys-lfu 在所有键值对中进行数据淘汰

  • allkeys-random 从所有键值对中随机淘汰
  • allkeys-lru 依据 LRU 算法筛选所有数据进行淘汰
  • allkeys-lfu 依据 LFU 算法筛选所有数据进行淘汰

LRU 算法

LRU : least recently used 最近最少使用。实现大致逻辑是,将所有数据以链表形式组织,最近访问的数据移动至表头,当数据写满时,删除队尾数据(淘汰),存在 2 个问题:

1: 需要额外的链表管理所有数据 2: 当大量数据访问时,会进行频繁的链表移动

Redis LRU 算法实现

Redis 对经典 LRU 算法进行简化,Redis 记录没有数据最近一次的访问时间戳,当进行数据淘汰时,随机选出 N 个元素作为淘汰候选集,然后比较 N 个数据的 lru 字段,把最小的数据从缓存中淘汰删除。

候选集挑选规则: 进入候选集的数据的 lru 字段必须小于当前候选集中的最小 lru 值。

配置项 maxmemory-samples 用于配置候选集 N 的数据个数:

代码语言:javascript
复制
config set maxmemory-samples 100

Redis 缓存淘汰策略最佳实践

  • 数据访问频率差异大(冷热数据区分明显)优先使用 allkeys-lru 策略
  • 数据访问频率差异不大时(无明显冷热数据区分)推荐使用 allkeys-random 策略
  • 业务有置顶需求(置顶新闻、视频)使用 volatile-lru 策略,并对指定数据不设置过期时间

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年1月20日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Redis 缓存淘汰策略
    • 如何估算缓存容量大小
      • Redis 缓存淘汰策略
        • noeviction 不进行数据淘汰
        • volatile-random, volatile-ttl, volatile-lru, volatile-lfu 在设置了过期时间的键值对进行数据淘汰
        • allkeys-random, allkeys-lru, allkeys-lfu 在所有键值对中进行数据淘汰
        • LRU 算法
      • Redis 缓存淘汰策略最佳实践
      相关产品与服务
      云数据库 Redis
      腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档