第八章 理解内存


Redis的所有数据都是保存在内存中的,因此了解内存至关重要!
我们需要了解Redis内存消耗在哪里?如何管理内存?最后考虑如何优化内存?


8.1 内存消耗
内存消耗可以分为:进程自身消耗和子进程消耗

8.1.1 内存使用统计
执行命令 info memory获取内存相关指标
需要重点关注的指标有:

used_memory_rss
used_memory
mem_fragmentation_ratio

mem_fragmentation_ratio>1时,说明used_memory_rss - used_memory多出的部分内存没有用于数据存储,而是被内存碎片所消耗,如果二者差距较大,说明碎片化严重。
mem_fragmentation_ratio<1时,这种情况主要出现在操作系统把Redis内存交换到硬盘所致,这种情况下,由于硬盘速度远远慢于内存,Redis的性能会变得很差,甚至僵死。

8.1.2 内存消耗划分
1 对象内存
Redis内存占用最大的一部分,存储着用户所有的信息。
2 缓冲内存
主要包括:客户端缓冲 复制积压缓冲区 AOF缓冲区
3 内存碎片

8.1.3 子进程内存消耗

子进程的内存消耗指AOF/RDB重写时Redis创建的子进程的内存消耗。


8.2 内存管理

Redis主要通过控制内存上限和回收策略实现内存管理。

8.2.1 设置内存上限
使用maxmemory参数限制最大可用内存
8.2.2 动态调整内存上限
通过config set maxmemory 动态修改

Redis-1>config set maxmemory 6GB
Redis-2>config set maxmemory 2GB
在这里插入代码片

8.2.3 内存回收策略
指:
删除到达过期时间的键对象
内存使用达到maxmemory上限时触发内存溢出控制策略

1 删除过期键对象
惰性删除
定时任务删除:自适应算法
2 内存溢出控制策略


8.3 内存优化
深入理解Redis的一些细节:

8.3.1 redisObject对象


8.3.3 共享对象池

共享对象池指Redis内部维护一个[0-9999]的整数对象池,用于节约内存。

对比发现:使用整数对象池之后,内存使用降低30%以上。

在使用共享对象池应注意:
1.共享内存池和maxmemory_LRU策略冲突。

2.一个问题:为什么Redis只保留整数对象池?

  1. 整数对象池复用的几率最大
    2)对象共享时一个关键操作是判断相等性,而整数比较算法的时间复杂度为O(1)最低。

8.3.4 字符串优化
字符串对象是Redis内部最常用的数据类型,因此了解字符串的细节对节约内存十分重要。
1 字符串结构

2 预分配机制

3 字符串重构


8.3.5 编码优化 需要时详细查看课本
1 了解编码
2 控制编码类型
3 ziplist编码
4 intset编码


8.3.6 控制键的数量 需要时详细查看

《Redis开发与运维》学习第八章相关推荐

  1. Redis开发与运维 必备-电子书

    Redis开发与运维电子书 fulei出版 链接: https://pan.baidu.com/s/12rlHhOKP7_72GE8a74lN1g 密码: eep2 复制这段内容后打开百度网盘手机Ap ...

  2. 「Redis开发与运维」读书笔记

    第一章 初识Redis Redis的8个重要特性 速度快 内存存储数据 C语言实现 单线程架构,避免多线程竞争问题 Redis源码优化好 基于键值对的数据结构服务器 Redis 值可支持多种数据结构, ...

  3. <Redis开发与运维>一书阅读笔记记录

    文章目录 前言 第1章:初始redis 盛赞redis redis特性 redis使用场景 第2章:API的理解和使用 预备知识 全局命令 数据结构和内部编码 单线程架构 字符串 命令 内部编码 典型 ...

  4. Redis开发与运维笔记_1 初识2 API

    目录 概述 第1章 初识Redis 1.1 盛赞Redis 1.2 Redis特性 1.3 配置.启动.操作.关闭Redis 第2章 API的理解和使用 2.1 预备 2.1.1 全局命令 2.1.2 ...

  5. 读书笔记:redis开发与运维 基础篇

     redis特性    1>速度快:redis所有数据都是存放在内存中,是redis速度快的主要原因,是有c编写,一般来说用c编写的程序距离操作系统近,执行速度更快,非阻塞I/O,使用epoll ...

  6. 【Redis】《Redis 开发与运维》笔记-Chapter12-开发运维的“ 陷阱”

    十二.开发运维的" 陷阱" 1.Linux配置优化之内存分配控制 1)vm.overcommit_memory Linux操作系统对大部分申请内存的请求都回复yes,以便能运行更多 ...

  7. 《Redis开发与运维》读书笔记--初识Redis(一)

    目录 盛赞Redis Redis特性 redis使用场景 redis可以做什么? redis不可以做什么? 关于用好redis的两点建议 本章重点回顾 写在前面: 想必在写项目的过程中,我们很多时候都 ...

  8. Redis 开发与运维

    Getting Start 高性能 性能优势的体现 C语言实现的内存管理 epoll的I/O多路复用技术+IO连接/关闭/读写通过事件实现异步的非阻塞IO TCP协议 单线程架构,不会因为高并发对服务 ...

  9. 《Redis开发与运维》各章重点回顾

    第 1 章 初识 Redis Redis 8个特性:速度快.基于键值对的数据结构服务器.功能丰富.简单稳定.客户端语言多.持久化.主从复制.支持高可用和分布式. Redis 不是万金油,有些场景不适合 ...

  10. Redis理解内存《Redis开发与运维读书笔记》

    文章目录 内存的消耗 内存划分 内存管理 内存优化 内存的消耗 可以使用info memory 查看内存消耗. 内存划分 对象内存 = sizeof(key) + sizeof(value) 应避免使 ...

最新文章

  1. 陌陌联席总裁离职 股价大涨背后阿里收购传闻再起
  2. ClassPathBeanDefinitionScanner 扫描给定的包及其子包
  3. 数据库---JDBC
  4. System Information for Windows
  5. 跟我一起学Redis之Redis事务简单了解一下
  6. 如何让Docker镜像飞起来
  7. 修复 github 项目的语言属性
  8. 【BZOJ3674】—可持久化并查集加强版(可持久化并查集)
  9. XmlSerializer对象
  10. Flink 1.11 新特性之 SQL Hive Streaming 简单示例
  11. webstorm11.0下载地址和webstorm11.0破解程序patcher.exe下载使用方法说明 前端IDE工具的利器...
  12. spss-多元线性回归分析
  13. 基于TensorRT和onnxruntime下pytorch的Bert模型加速对比实践
  14. 豆瓣API 不能访问的解决方法
  15. BZOJ1507 [NOI2003]Editor
  16. oracle数据库 备份与恢复笔记 rman
  17. 安卓gpio操作示例
  18. Mac 安装CodeBlocks
  19. coreldraw凸起字符_CorelDRAW X7制作凹凸字效果
  20. Windows学习总结(21)——常用网络命令ping、Telnet等详解

热门文章

  1. 怎么把照片做成计算机主题,windows10主题制作怎么操作_windows10电脑主题如何自己制作...
  2. 最全的视频格式分类详解(很全面)
  3. WinRar注册机或注册码
  4. 武汉加油!爬取百度迁徙地图数据+城市出行强度
  5. 洛天依-元宵吃货节歌词
  6. 这个用JAVA开发的全开源商城系统可免费商用
  7. html 360 浏览器图片自适应,360浏览器看图模式 一键保存高清套图
  8. Java之—hutool工具类二维码生成跟背景图合并输出
  9. 茆诗松等《高等数理统计(第二版)》例 1.28 的错误及改正
  10. AWS SQS, SWF and SNS