redis4.0下内存命令详解

介绍

这篇文章主要介绍”redis4.0下内存命令详解”,在日常操作中,相信很多人在redis4.0下内存命令详解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答“redis4.0下内存命令详解”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

前言

在过去,查看复述的内存使用状态只有信息记忆命令,而且也只有一些基础信息,想要获取全局信息就有些困难高祖开始复述,提供了内存命令,一切都变得简单起来。

内存命令

内存命令一共5个有子命令,可以通过记忆帮助来查看:

127.0.0.1:6379>记忆帮助

1)“内存医生——输出内存问题report"

2)“内存使用量& lt; key>(样品& lt; count>)——估计内存使用量key"

3)“内存统计数据,显示内存使用details"

4)“记忆清除——请求分配器释放memory"

5)“记忆MALLOC-STATS——显示内部stats"分配器;

接下来我们从内存数据开始,一一介绍各个子命令的功能。

1。内存数据

首先,我们需要明确一个概念,复述的内存使用不仅包含所有的键值数据,还有描述这些键值的元信息,以及许多管理功能的消耗,比如持久化,主从复制,通过内存统计数据可以更好的了解到复述的内存使用状况。

这里我们启动了一个打开持久化功能并且带奴隶的复述,向其中随机写入了一些数据(某些数据还带有过期时间),以便读者可以更好的了解复述的内存使用,接下来执行内存统计命令:

127.0.0.1:6379>内存数据

, 1)“peak.allocated"

, 2)(整数)423995952

, 3)“total.allocated"

, 4)(整数)11130320

, 5)“startup.allocated"

, 6)(整数)9942928

, 7)“replication.backlog"

, 8)(整数)1048576

, 9)“clients.slaves"

10)(整数)16858

11)“clients.normal"

12)(整数)49630

13)“aof.buffer"

14)(整数)3253

15)“db.0"

16) 1)“overhead.hashtable.main"

,,2)(整数)5808

,,3)“overhead.hashtable.expires"

,,4)(整数)104

17)“overhead.total"

18)(整数)11063904

19)“keys.count"

20)(整数)94

21)“keys.bytes-per-key"

22)(整数)12631

23)“dataset.bytes"

24)(整数)66416

25)“dataset.percentage"

26)“5.5934348106384277“

27)“peak.percentage"

28)“2.6251003742218018“

29)“fragmentation"

30)“1.1039986610412598“

一共有15项内容,内存使用量均以字节为单位,我们一个一个来看:

1。peak.allocated

复述,启动到现在,最多使用过多少内存。

2。total.allocated

当前使用的内存总量。

3。startup.allocated

复述,启动初始化时使用的内存,有很多读者会比较奇怪,为什么我的复述,启动以后什么都没做就已经占用了几十MB的内存?

这是因为复述本身不仅存储键-值,还有其他的内存消耗,比如共享变量、主从复制,持久化和db元信息,下面各项会有详细介绍。

4。replication.backlog

主从复制积压使用的内存,默认10 mb,积压只在主从断线重连时发挥作用,主从复制本身并不依赖此项。

5。clients.slaves

主从复制中所有奴隶的读写缓冲区,包括输出缓冲区(也即输出缓冲区)使用的内存和querybuf(也即输入缓冲区),这里简单介绍一下主从复制:

复述,把一次事件循环中,所有对数据库发生更改的内容先追加到奴隶的输出缓冲区中,在事件循环结束后统一发送给奴隶。

那么主从之间就难免会有数据的延迟,如果主从之间连接断开,重连时为了保证数据的一致性就要做一次全量同步,这显然是不够高效的.backlog就是为此而设计,主人在待办事项列表中缓存一部分主从复制的增量数据,断线重连时如果奴隶的偏移量在待办事项列表中,那就可以只把偏移量之后的增量数据同步给奴隶即可,避免了全量同步的开销。

6。clients.normal

除奴隶外所有其他客户端的读写缓冲区。

有时候一些客户端读取不及时,就会造成输出缓冲区积压占用内存过多的情况,可以通过配置项client-output-buffer-limit来限制,当超过阈值之后复述,就会主动断开连接以释放内存,奴隶亦是如此。

7。aof.buffer

此项为aof持久化使用的缓存和aofrewrite时产生的缓存之和,当然如果关闭了appendonly那这项就一直为0:

复述,并不是在有写入时就立即做持久化的,而是在一次事件循环内把所有的写入数据缓存起来,待到事件循环结束后再持久化到磁盘。

redis4.0下内存命令详解