Redis 内存优化在 vivo 的探索与实践

作者:微信小助手

发布时间:2022-04-27T22:09:24

作者:互联网服务器团队- Tang Wenjian


一、 背景


使用过 Redis 的同学应该都知道,它基于键值对(key-value)的内存数据库,所有数据存放在内存中,内存在 Redis 中扮演一个核心角色,所有的操作都是围绕它进行。


我们在实际维护过程中经常会被问到如下问题,比如数据怎么存储在 Redis 里面能节约成本、提升性能?Redis内存告警是什么原因导致?


本文主要是通过分析 Redis内存结构、介绍内存优化手段,同时结合生产案例,帮助大家在优化内存使用,快速定位 Redis 相关内存异常问题。


二、 Redis 内存管理


本章详细介绍 Redis 是怎么管理各内存结构的,然后主要介绍几个占用内存可能比较多的内存结构。首先我们看下Redis 的内存模型。


内存模型如图:



【used_memory】:Redis内存占用中最主要的部分,Redis分配器分配的内存总量(单位是KB)(在编译时指定编译器,默认是jemalloc),主要包含自身内存(字典、元数据)、对象内存、缓存,lua内存。


【自身内存】:自身维护的一些数据字典及元数据,一般占用内存很低。


【对象内存】:所有对象都是Key-Value型,Key对象都是字符串,Value对象则包括5种类(String,List,Hash,Set,Zset),5.0还支持stream类型。