文章目录

  • 内存的消耗
    • 内存划分
    • 内存管理
    • 内存优化

内存的消耗

可以使用info memory 查看内存消耗。

内存划分

  • 对象内存 = sizeof(key) + sizeof(value) 应避免使用过长的key
  • 缓冲内存
    * Redis自身内存:消耗比较小可忽略不计
    * 客户端缓存:所有接入Reids服务器的TCP连接的输入输出缓存
    * 复制积压缓存区:可以有效避免全两复制
    * AOF缓存:用户Redis重写期间保存最近的写入命令
    * 内存碎片: 这里是重点需要注意的
    * 子进程内存消耗:AOF/RDB重写时Redis创建的子进程消耗的内存。

内存管理

Redis主要通过设置内存上限和回收策略实现内存管理

  • 设置内存上限
    1)当内存超过上限时会通过LRU等策略释放空间
    2)防止所有内存超过服务器的物理内存

  • 回收策略
    1)删除过期键对象
    * 惰性删除:客户端读取对象时发现过期了才删除。
    * 定时任务删除:
    Redis自己维护的定时任务,默认每秒运行10次。从每个数据库随机检查20个键如果超过25%的键过期了则循环执行回收逻辑直到不足25%或者运行超时为止
    2)内存溢出的控制策略

    策略 说明
    noeviction 默认策略,拒绝写入单不删除,只响应读操作
    volatitle-LRU 根据LRU算法删除过期的键,直到腾出足够空间,如果没有可删除的键则会退到默认策略
    allkeys-LRU 根据LRU算法删除键,不管是否超时,直到腾出足够空间
    allkeys-random 随机删除所有键,直到腾出足够空间为止
    volatitle-random 随机删除过期键,直到腾出足够空间
    volatitle-ttl 根据键对象的TTL,删除最近要过期的键。如果没有可删除的键则会退到默认策略

    Redis4之后支持的内存策略
    |volatile-LFU|根据LFU算法来淘汰过期键。 |
    |allkeys-LFU| 根据LFU算法删除键,不管是否超时,直到腾出足够空间 |

  • LRU 算法:
    LRU是Least Recently Used的缩写,即最近最少使用,常用于页面置换算法,是为虚拟页式存储管理服务的。
    实现 LRU 算法除了需要 key/value 字典外,还需要附加一个链表,链表中的元素按照一定的顺序进行排列。当空间满的时候,会踢掉链表尾部的元素。当字典的某个元素被访问时,它在链表中的位置会被移动到表头。所以链表的元素排列顺序就是元素最近被访问的时间顺序。位于链表尾部的元素就是不被重用的元素,所以会被踢掉。位于表头的元素就是最近刚刚被人用过的元素,所以暂时不会被踢。

  • LFU算法
    LFU 的全称是Least Frequently Used,表示按最近的访问频率进行淘汰,它比 LRU 更加精准地表示了一个 key 被访问的热度

内存优化

  • 精简键值对的大小
  • 使用高效二进制序列化工具
  • 使用对象共享池(0-9999的对象池)优化小整数对象
  • 数据优先使用整数,比字符串省空间
  • 根据不同数据类型的内部编码优化内存

https://cachecloud.github.io/2017/02/16/Redis%E5%86%85%E5%AD%98%E4%BC%98%E5%8C%96/

Redis理解内存《Redis开发与运维读书笔记》相关推荐

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

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

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

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

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

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

  4. 终于有阿里P8从开发、运维两个角度总结出了Redis实战手册

    从开发.运维两个角度总结了Redis实战经验,深入浅出地剖析底层实现,包含大规模集群开发与运维的实际案例.应用技巧. 前言 Redis作为基于键值对的NoSQL数据库,具有高性能.丰富的数据结构.持久 ...

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

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

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

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

  7. Shell 开发在运维中的经验总结

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 无论是系统运维,还是应用运维,均可分为"纯手工" ...

  8. python bottle框架 运维_python bottle框架(WEB开发、运维开发)教程 | linux系统运维...

    教程目录 一:python基础 二:bottle基础 python bottle 框架基础教程:环境部署 三:WEB开发教程 四:运维开发教程 运维开发(1.1):框架.结构介绍 运维开发(1.2): ...

  9. python bottle部署g_python bottle框架(WEB开发、运维开发)教程 | linux系统运维

    教程目录 一:python基础 二:bottle基础 python bottle 框架基础教程:环境部署 三:WEB开发教程 四:运维开发教程 运维开发(1.1):框架.结构介绍 运维开发(1.2): ...

最新文章

  1. winRAR 没有右键选项
  2. Fedora 与 Ubuntu 深度比较
  3. 日跑几十万作业,唯品会HDFS是如何优化的
  4. 宫崎骏的动画片真有意思啊。
  5. Android之自定义控件深入
  6. 123. 买卖股票的zui佳时机 III(JavaScript)
  7. VBA-Excel重心法求解最优地址
  8. 链游成公链新宠,风口之下究竟哪家称王?
  9. 2022年上半年技术领域TOP 10高薪岗位出炉,第一名月薪4万
  10. 链路追踪Logback-ERROR日志邮件发送
  11. 局部路径规划算法-DWA动态窗口法
  12. hbuilder 断点_Hbuilder配置php断点调试
  13. 串灯控制盒去掉怎么接_彩灯控制器怎么接线
  14. python函数内计时_Python函数执行计时
  15. [gdc15]暗黑破坏神3:夺魂之镰的开发之路
  16. 想自主创业做外包,找甲方公司
  17. 吉他大师 安德列斯·塞戈维亚
  18. ORB特征提取详解 BRUEF rBRIEF steered BRIEF
  19. OJ 系列之常规练习题(二)
  20. 亚马逊商品自然排名算法 A9 学习笔记

热门文章

  1. eclipse查看web项目下classes文件夹的方法
  2. Sterm-Brocot Tree
  3. 链路追踪 SkyWalking 源码分析 —— Agent 插件体系
  4. 列表左边左右固定,右边可以左右滚动,且左右两边列表滚动时上下联动
  5. iOS 仿链家筛选(单选、多选、滑动筛选联动、多表联动)
  6. 整理的汉字及拼音、编码数据文件,依据拼音声母进行归类共计2万多条
  7. Error executing DDL “create table Book(表名)“
  8. c语言开发数控软件编程电源,基于单片机数控电源设计.doc
  9. 金融风控实战——额度模型与风控策略
  10. 快递单信息抽取【二】基于ERNIE1.0至ErnieGram + CRF预训练模型