怎样针对Redis社交关系链存储优化淘汰规则_对比多种策略的存储效率

落晨吖_4331

落晨吖_4331

2026-05-29

933人浏览

原创

volatile-lru 不适合社交关系链,因其仅淘汰带过期时间的 key,而关系数据作为主数据映射不应设 ttl;强行加 expire 会引发雪崩与 cpu 升高;allkeys-lfu 更匹配二八流量特征,配合调大 maxmemory-samples 和合理配置 lfu 衰减可提升淘汰精准度。

怎样针对redis社交关系链存储优化淘汰规则_对比多种策略的存储效率

社交关系链(如关注、粉丝、共同好友)对缓存的“热度分布极不均匀”——少量头部用户(明星、大V)被高频查询,大量长尾用户访问稀疏;同时关系数据本身生命周期明确(例如临时互关、活动期间涨粉)。直接套用默认 noeviction 或通用 allkeys-lru 会导致热点键被误踢、冷数据长期占内存、或写入失败频发。必须按数据特征分层配置淘汰策略。

为什么 volatile-lru 不适合社交关系链

社交关系链中,多数 key(如 follow:1001、fans:2002)本就不该设过期时间——它们是业务主数据的缓存映射,删除后需回源重建,代价高;强行加 EXPIRE 反而引入 TTL 维护开销和雪崩风险。而 volatile-lru 只作用于带过期时间的 key,等于主动放弃对核心关系数据的淘汰控制,实际失效。

  • 现象:配置 volatile-lru 后内存持续上涨,INFO memory 显示 evicted_keys 为 0
  • 原因:你没给关系 key 设过期时间,策略压根不触发
  • 更糟的是:若为保策略生效而给所有关系 key 加 EXPIRE 86400,会引发定时删除线程(serverCron)密集扫描,CPU 升高,且过期时间统一导致批量失效(雪崩)

allkeys-lfu 是更匹配的起点

关系链天然存在强“二八效应”:TOP 0.1% 用户贡献超 70% 的读请求。allkeys-lfu 淘汰访问频次最低的 key,能自动沉淀出高频关系数据,比只看时间的 LRU 更抗突发流量干扰(比如某大V突然上热搜,其粉丝列表被集中拉取,lfu 不会因“刚加载进来”就淘汰它)。

Redis Skill - 高性能缓存管理
Redis Skill - 高性能缓存管理

Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。

下载
  • 必须调大 maxmemory-samples:默认值 5 太小,采样不准;生产建议设为 10–20,提升 LFU 计数器采样代表性
  • 注意 LFU 衰减:Redis 默认每分钟对计数器衰减一次(lfu-log-factor 控制衰减粒度),避免历史热度长期绑架淘汰决策;若业务有明显日周期(如夜间低峰),可微调 lfu-decay-time 为 30(单位:分钟)
  • 验证方式:OBJECT FREQ follow:1001 查看当前频率计数,对比冷 key(如 follow:999999)确认差距是否显著

混合策略:对长尾关系用 allkeys-random + 客户端兜底

对于新注册用户、沉默用户的关系数据,访问极少但又不能删(需保证数据一致性),allkeys-lfu 可能长期无法淘汰它们。此时可结合客户端逻辑做轻量分级:

  • 写入时判断用户等级:新用户(注册 tail:(如 tail:follow:888888)
  • 用 redis-cli --scan --pattern "tail:*" | xargs redis-cli DEL 每日凌晨清理一次(低成本,不影响在线服务)
  • 若仍需运行时淘汰,可单独起一个 Redis 实例配 allkeys-random 存放长尾关系,与主实例隔离;随机淘汰对这类无访问规律的数据反而更公平,且无计算开销
  • 切忌在主实例混用 allkeys-random:它不区分冷热,可能把刚查过的明星粉丝列表随机踢掉

真正关键的不是选哪个策略,而是承认关系链数据不能“一策管全量”。lfu 管热区,random 或定时脚本管冷区,而所有策略生效的前提,是 maxmemory 必须设为硬上限——否则内存无限增长,淘汰机制根本不会启动。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

redis

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.02

4549

19

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.14

4095

11

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.02

7612

6

redis怎么做缓存服务器
redis怎么做缓存服务器

redis 作为缓存服务器的答案:redis 是一款开源、高性能、分布式的键值存储,可作为缓存服务器使用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

643

6

redis怎么解决数据一致性
redis怎么解决数据一致性

redis 提供了两种一致性模型,以维护副本数据一致性:强一致性 (sync) 确保写操作仅在复制到所有从节点后才完成;最终一致性 (async) 则在主节点上写操作后认为已完成,牺牲一致性换取性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

756

6

mysql和redis怎么保证双写一致性
mysql和redis怎么保证双写一致性

确保 mysql 和 redis 双写一致性的技术包括:1、事务性更新:同时更新 mysql 和 redis,保证一致性;2、主从复制:mysql 主服务器更改同步到 redis 从服务器;3、基于事件的更新:mysql 记录更改并发送到 redis等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

7542

6

redis缓存一般存些什么数据
redis缓存一般存些什么数据

redis缓存中存储的数据类型包括:字符串、哈希、列表、集合、有序集合、位图、地理空间数据和hyperloglog。这些数据类型适用于存储各种数据,从简单信息到复杂对象和地理位置。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

1160

6

redis的8种数据类型有哪些
redis的8种数据类型有哪些

redis 提供 8 种数据类型:字符串(文本、数字、二进制)、哈希(键值对)、列表(有序集合)、集合(无序唯一元素)、有序集合(按分数排序)、地理空间(地理位置)、hyperloglog(估计大数据基数)和位图(位序列存储)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

1136

6

redis主要作用有哪些
redis主要作用有哪些

redis 的主要作用包括:1. 缓存数据,提高访问速度;2. 充当消息队列,实现消息传递;3. 存储各种数据类型,如字符串、散列和集合;4. 管理会话信息,确保可靠性和可用性;5. 限制请求速率,防止服务器超载等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

6578

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习