这篇文章主要介绍”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:
复述,并不是在有写入时就立即做持久化的,而是在一次事件循环内把所有的写入数据缓存起来,待到事件循环结束后再持久化到磁盘。