Redis 内存模型

前言

Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分。

我们使用Redis时,会接触Redis的5种对象类型(字符串、哈希、列表、集合、有序集合),丰富的类型是Redis相对于Memcached等的一大优势。在了解Redis的5种对象类型的用法和特点的基础上,进一步了解Redis的内存模型,对Redis的使用有很大帮助,例如:

1、估算Redis内存使用量。目前为止,内存的使用成本仍然相对较高,使用内存不能无所顾忌;根据需求合理的评估Redis的内存使用量,选择合适的机器配置,可以在满足需求的情况下节约成本。

2、优化内存占用。了解Redis内存模型可以选择更合适的数据类型和编码,更好的利用Redis内存。

3、分析解决问题。当Redis出现阻塞、内存占用等问题时,尽快发现导致问题的原因,便于分析解决问题。

这篇文章主要介绍Redis的内存模型(以3.0为例),包括Redis占用内存的情况及如何查询、不同的对象类型在内存中的编码方式、内存分配器(jemalloc)、简单动态字符串(SDS)、RedisObject等;然后在此基础上介绍几个Redis内存模型的应用。

在后面的文章中,会陆续介绍关于Redis高可用的内容,包括主从复制、哨兵、集群等等,欢迎关注。

系列文章

深入学习Redis(1):Redis内存模型

深入学习Redis(2):持久化

深入学习Redis(3):主从复制

深入学习Redis(4):哨兵

深入学习Redis(5):集群

目录

一、Redis内存统计

二、Redis内存划分

1、数据(或者称为对象)

2、进程本身运行需要的内存

3、缓冲内存

4、内存碎片

三、Redis数据存储的细节

1、概述

2、jemalloc

3、redisObject

4、SDS

四、Redis的对象类型与内部编码

1、字符串

2、列表

3、哈希

4、集合

5、有序集合

五、应用举例

1、估算Redis内存使用量

2、优化内存占用

3、关注内存碎片率

六、参考文献

一、Redis内存统计

工欲善其事必先利其器,在说明Redis内存之前首先说明如何统计Redis使用内存的情况。

在客户端通过redis-cli连接服务器后(后面如无特殊说明,客户端一律使用redis-cli),通过info命令可以查看内存使用情况:

?

1

info memory

Redis 内存模型

其中,info命令可以显示redis服务器的许多信息,包括服务器基本信息、CPU、内存、持久化、客户端连接信息等等;memory是参数,表示只显示内存相关的信息。

返回结果中比较重要的几个说明如下:

(1) used_memoryRedis分配器分配的内存总量(单位是字节),包括使用的虚拟内存(即swap);Redis分配器后面会介绍。used_memory_human只是显示更友好。

(2) used_memory_rssRedis进程占据操作系统的内存(单位是字节),与top及ps命令看到的值是一致的;除了分配器分配的内存之外,used_memory_rss还包括进程运行本身需要的内存、内存碎片等,但是不包括虚拟内存。

因此,used_memory和used_memory_rss,前者是从Redis角度得到的量,后者是从操作系统角度得到的量。二者之所以有所不同,一方面是因为内存碎片和Redis进程运行需要占用内存,使得前者可能比后者小,另一方面虚拟内存的存在,使得前者可能比后者大。

由于在实际应用中,Redis的数据量会比较大,此时进程运行占用的内存与Redis数据量和内存碎片相比,都会小得多;因此used_memory_rss和used_memory的比例,便成了衡量Redis内存碎片率的参数;这个参数就是mem_fragmentation_ratio。

(3) mem_fragmentation_ratio内存碎片比率,该值是used_memory_rss / used_memory的比值。

mem_fragmentation_ratio一般大于1,且该值越大,内存碎片比例越大。mem_fragmentation_ratio

Original: https://www.cnblogs.com/itplay/p/13932740.html
Author: 是谁扭曲了时空
Title: Redis 内存模型

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/529464/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • [ Linux ] 设置开机自动登录

    https://www.cnblogs.com/yeungchie/ 查看桌面环境 file -L /etc/systemd/system/display-manager.serv…

    Linux 2023年6月7日
    096
  • 分区表、文件系统等计算机基础知识

    开机固件 BIOS UEFI 特别老的BIOS不支持GPT分区 目前已取代BIOS 分区表类型 MBR GPT 1.不支持2TB以上的硬盘2.主分区不能超过4个3.可以通过建立扩展…

    Linux 2023年6月7日
    090
  • JavaScript快速入门-06-函数

    6 函数 6.1 函数定义 函数可以封装语句,然后在任何地方、任何时间执行。JavaScript中的函数使用 function关键字声明,主要由 函数名、 函数参数和 函数体组成。…

    Linux 2023年6月7日
    093
  • sql server 增删改(查太多了)

    delete(删除) 使用 delete语句删除表中数据。 delete from 表名 [where where_definition] 如果不使用where子句,将删除表中所有…

    Linux 2023年6月7日
    076
  • Kubenertes-实战入门

    实战入门 Namespace Namespace是kubernetes系统中的一种非常重要资源,它的主要作用是用来实现 多套环境的资源隔离。 默认情况下,kubernetes集群中…

    Linux 2023年6月13日
    082
  • 一文入门Qt Quick

    以下内容为本人的著作,如需要转载,请声明原文链接微信公众号「englyf」 https://mp.weixin.qq.com/s/dvamU6q5lZQb5hztfD2zNg 初识…

    Linux 2023年6月6日
    0111
  • Linux下腾达无线网卡U6的驱动安装

    U6无线网卡是rt8192eu芯片, 腾达驱动只支持到内核4.4左右; 5.0以上的内核就需要自己编译的。 终于找到了一个github修改版的驱动,经过验证运行正常。 https:…

    Linux 2023年6月14日
    075
  • 闭包、装饰器

    闭包: 闭包的演变过程: 闭包的概念: “闭包”的本质就是函数的嵌套定义,即在函数内部再定义函数 “闭包”有两种不同的方式,第一种是…

    Linux 2023年6月8日
    072
  • 致远 OA 组合 getshell

    测试版本为: 致远 A8-V5 协同管理软件 V6.1SP2 1.获取cookie信息 2….

    Linux 2023年5月28日
    0307
  • windows下redis配置密码

    redis安装后目录如下: 最简单的启动方式是直接双击redis-server.exe 这样启动会有个问题,一旦你把命令行窗口关闭 redis也会被关闭,所以我们需要把它注册成服务…

    Linux 2023年5月28日
    088
  • podman(无根用户管理podman)

    用户操作在允许没有root特权的用户运行Podman之前,管理员必须安装或构建Podman并完成以下配置cgroup V2Linux内核功能允许用户限制普通用户容器可以使用的资源,…

    Linux 2023年6月7日
    077
  • null和空字符串对于查询where条件语句的影响

    在数据库中我们进行数据处理的过程中,对于null值或者空字符串的情况对于这种数据我们进行计算平均值以及查询过程中如何进行对于这类数据的处理呢? step1:建表:create ta…

    Linux 2023年6月14日
    088
  • Golang 实现 Redis(8): TCC分布式事务

    本文是使用 golang 实现 redis 系列的第八篇, 将介绍如何在分布式缓存中使用 Try-Commit-Catch 方式来解决分布式一致性问题。 在上一篇文章中我们使用一致…

    Linux 2023年5月28日
    080
  • 一文带你全面了解什么是颠覆时代的Web3.0未来互联网

    前言 大家还记得前段时间Meta公司,也就是FaceBook改名后的那家,CEO扎克伯格发的那张元宇宙自拍吗? 他没想到的是,随手的一张自拍却引来了群嘲,20年前的像素感,粗糙的人…

    Linux 2023年6月7日
    0102
  • Netty 如何高效接收网络数据?一文聊透 ByteBuffer 动态自适应扩缩容机制

    本系列Netty源码解析文章基于 4.1.56.Final版本,公众号:bin的技术小屋,大家如果看到图片显示不了的话,可以查看公众号原文 前文回顾 在前边的系列文章中,我们从内核…

    Linux 2023年6月6日
    095
  • HRShell:Flask构建的HTTPS HTTP反向Shell

    https://www.freebuf.com/sectool/212678.html 纸上得来终觉浅,绝知此事要躬行! Original: https://www.cnblogs…

    Linux 2023年5月28日
    0102
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球