当前位置: 首页 > news >正文

Redis 测试:过期 key 内存释放情况

1 测试目的

验证 Redis key 过期后的内存释放效果。

Redis 对过期 key 的内存释放主要有两个机制:

  1. 惰性删除:访问一个 key 时检查这个 key 是否过期,如果过期则删除该 key。
  2. 定期删除:Redis 内部事件循环,当该事件循环时会检查一批 key,将过期的 key 删除。

2 测试方法

  1. 启动 Redis
  2. 使用脚本写入数据
  3. 写入完成后查看 redis-server 进程内存占用和 Redis 内部统计的内存占用信息
  4. 等待 TTL 到期,重新查看内存释放情况

使用以下脚本向 Redis 插入约 1GB 测试数据,每条 key 都带过期时间:

#!/bin/bash# 参数配置
TOTAL_KEYS=1000000      # 总 key 数
VALUE_SIZE=1024         # 每条 value 字节数(1KB)
TTL=60                  # key 过期时间,单位秒# 生成 value 字符串(全 0)
VAL=$(head -c $VALUE_SIZE /dev/zero | tr '\0' '0')# 批量写入 Redis
(
for ((i=1;i<=TOTAL_KEYS;i++)); doecho "SET key:$i $VAL EX $TTL"
done
) | redis-cli --pipe

使用以下命令分别查看 redis-server 进程内存占用和 Redis 内部统计的内存占用信息:

# 查看进程内存占用
pidof redis-server | xargs ps -o pid,comm,rss -p
# 查看 redis 内部统计的内存占用信息
redis-cli -p 6379 info memory | grep used_memory_human

3 测试结果

3.1 Redis 3.2.1

写入数据脚本执行完成后,查看内存情况:

    PID COMMAND           RSS70295 redis-server    1382500
used_memory_human:1.28G

Redis 内存占用大约在 1G。等待 30s key 过期后,再次查看内存情况:

    PID COMMAND           RSS70295 redis-server    10652
used_memory_human:801.09K

Redis 内存占用大幅度下降,说明带 TTL 的 key 过期后,内存能够成功被释放。

3.2 Redis 6.2.10

写入数据脚本执行完成后,查看内存情况:

    PID COMMAND           RSS65526 redis-server    1361984
used_memory_human:1.28G

Redis 内存占用大约在 1G。等待 30s key 过期后,再次查看内存情况:

    PID COMMAND           RSS65526 redis-server    20844
used_memory_human:854.12K

Redis 内存占用大幅度下降,说明带 TTL 的 key 过期后,内存能够成功被释放。

http://www.xdnf.cn/news/1403533.html

相关文章:

  • 深入理解shared_ptr与循环引用问题
  • node.js ---文件读写(FS模块)
  • 用【Coze】实现文案提取+创作
  • 蓓韵安禧活性叶酸独立包装日期标注
  • 加密软件哪个好用?加密软件-为数据共享提供安全保障
  • 【基础-单选】例如现在要实现一个广告弹窗,包含图片和文本等信息,使用下面那种弹窗可以实现
  • ROS 2 机器人开发$2
  • 项目管理方法论有哪些流派
  • basic_ostream
  • Linux网络基础1(三)之网络与协议栈and网络传输基本流程
  • Yolov8损失函数:回顾Yolov8-Loss
  • 6.1 Update不能写复杂的逻辑
  • HarmonyOS Router 基本使用详解:从代码示例到实战要点
  • 【随笔】【Debian】【ArchLinux】基于Debian和ArchLinux的ISO镜像和虚拟机VM的系统镜像获取安装
  • 4-ATSAM3X8E-FLASH写入
  • Docker(自写)
  • MEM课程之物流与供应链管理课程经典案例及分析-个人原创内容放在此保存
  • 数据结构(C语言篇):(七)双向链表
  • 三重积分从入门到入土
  • 【C++】string
  • Selenium 实战项目:电子商务网站自动化测试
  • Dify的搭建
  • MinerU本地化部署
  • 如何使用 DeepSeek 帮助自己的工作?—— 从效率工具到能力延伸的实战指南
  • kind集群应用
  • 【从零开始java学习|第十篇】面向对象
  • 【前端教程】MIUI 官网界面设计与实现全解析
  • 函数(2)
  • 机器学习中KNN算法介绍
  • static静态文件和requests请求对象