Redis理解内存《Redis开发与运维读书笔记》
文章目录
- 内存的消耗
- 内存划分
- 内存管理
- 内存优化
内存的消耗
可以使用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开发与运维读书笔记》相关推荐
- 【Redis】《Redis 开发与运维》笔记-Chapter12-开发运维的“ 陷阱”
十二.开发运维的" 陷阱" 1.Linux配置优化之内存分配控制 1)vm.overcommit_memory Linux操作系统对大部分申请内存的请求都回复yes,以便能运行更多 ...
- <Redis开发与运维>一书阅读笔记记录
文章目录 前言 第1章:初始redis 盛赞redis redis特性 redis使用场景 第2章:API的理解和使用 预备知识 全局命令 数据结构和内部编码 单线程架构 字符串 命令 内部编码 典型 ...
- 「Redis开发与运维」读书笔记
第一章 初识Redis Redis的8个重要特性 速度快 内存存储数据 C语言实现 单线程架构,避免多线程竞争问题 Redis源码优化好 基于键值对的数据结构服务器 Redis 值可支持多种数据结构, ...
- 终于有阿里P8从开发、运维两个角度总结出了Redis实战手册
从开发.运维两个角度总结了Redis实战经验,深入浅出地剖析底层实现,包含大规模集群开发与运维的实际案例.应用技巧. 前言 Redis作为基于键值对的NoSQL数据库,具有高性能.丰富的数据结构.持久 ...
- 《Redis开发与运维》各章重点回顾
第 1 章 初识 Redis Redis 8个特性:速度快.基于键值对的数据结构服务器.功能丰富.简单稳定.客户端语言多.持久化.主从复制.支持高可用和分布式. Redis 不是万金油,有些场景不适合 ...
- Redis开发与运维 必备-电子书
Redis开发与运维电子书 fulei出版 链接: https://pan.baidu.com/s/12rlHhOKP7_72GE8a74lN1g 密码: eep2 复制这段内容后打开百度网盘手机Ap ...
- Shell 开发在运维中的经验总结
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 无论是系统运维,还是应用运维,均可分为"纯手工" ...
- python bottle框架 运维_python bottle框架(WEB开发、运维开发)教程 | linux系统运维...
教程目录 一:python基础 二:bottle基础 python bottle 框架基础教程:环境部署 三:WEB开发教程 四:运维开发教程 运维开发(1.1):框架.结构介绍 运维开发(1.2): ...
- python bottle部署g_python bottle框架(WEB开发、运维开发)教程 | linux系统运维
教程目录 一:python基础 二:bottle基础 python bottle 框架基础教程:环境部署 三:WEB开发教程 四:运维开发教程 运维开发(1.1):框架.结构介绍 运维开发(1.2): ...
最新文章
- winRAR 没有右键选项
- Fedora 与 Ubuntu 深度比较
- 日跑几十万作业,唯品会HDFS是如何优化的
- 宫崎骏的动画片真有意思啊。
- Android之自定义控件深入
- 123. 买卖股票的zui佳时机 III(JavaScript)
- VBA-Excel重心法求解最优地址
- 链游成公链新宠,风口之下究竟哪家称王?
- 2022年上半年技术领域TOP 10高薪岗位出炉,第一名月薪4万
- 链路追踪Logback-ERROR日志邮件发送
- 局部路径规划算法-DWA动态窗口法
- hbuilder 断点_Hbuilder配置php断点调试
- 串灯控制盒去掉怎么接_彩灯控制器怎么接线
- python函数内计时_Python函数执行计时
- [gdc15]暗黑破坏神3:夺魂之镰的开发之路
- 想自主创业做外包,找甲方公司
- 吉他大师 安德列斯·塞戈维亚
- ORB特征提取详解 BRUEF rBRIEF steered BRIEF
- OJ 系列之常规练习题(二)
- 亚马逊商品自然排名算法 A9 学习笔记
热门文章
- eclipse查看web项目下classes文件夹的方法
- Sterm-Brocot Tree
- 链路追踪 SkyWalking 源码分析 —— Agent 插件体系
- 列表左边左右固定,右边可以左右滚动,且左右两边列表滚动时上下联动
- iOS 仿链家筛选(单选、多选、滑动筛选联动、多表联动)
- 整理的汉字及拼音、编码数据文件,依据拼音声母进行归类共计2万多条
- Error executing DDL “create table Book(表名)“
- c语言开发数控软件编程电源,基于单片机数控电源设计.doc
- 金融风控实战——额度模型与风控策略
- 快递单信息抽取【二】基于ERNIE1.0至ErnieGram + CRF预训练模型