美文网首页
02-Redis内存划分

02-Redis内存划分

作者: yakun0622 | 来源:发表于2020-03-31 10:11 被阅读0次

Redis作为内存数据库,在内存中存储的主要内容是数据(键值对)

数据

数据是Redis中存储的主要内容,这部分占用的内存会统计在used_memory中
Redis使用键值对存储数据,其中的值(对象)包含5种类型,即字符串、哈希、列表、集合、有序集合。
这5种类型是Redis对外提供的,实际上,在Redis内部,每种类型可能有2种或更多的内部编码实现
此外,Redis在存储对象时,并不是直接将数据扔进内存,而是会对对象进行各种包装:如redisObject、SDS等;

进程内存

Redis主进程本身运行肯定需要占用内存,如代码、常量池等等;这部分内存大约几兆,在大多数生产环境中与Redis数据占用的内存相比可以忽略。这部分内存不是由jemalloc分配,因此不会统计在used_memory中。

除了主进程外,Redis创建的子进程运行也会占用内存,如Redis执行AOF、RDB重写时创建的子进程。当然,这部分内存不属于Redis进程,也不会统计在used_memory和used_memory_rss中。

缓冲内存

缓冲内存包括客户端缓冲区复制积压缓冲区AOF缓冲区等

  • 客户端缓冲存储客户端连接的输入输出缓冲
  • 复制积压缓冲用于部分复制功能
  • AOF缓冲区用于在进行AOF重写时,保存最近的写入命令

这部分内存由jemalloc分配,因此会统计在used_memory中

内存碎片

内存碎片是Redis在分配、回收物理内存过程中产生的。
例如,如果对数据的更改频繁,而且数据之间的大小相差很大,可能导致redis释放的空间在物理内存中并没有释放,但redis又无法有效利用,这就形成了内存碎片。
内存碎片不会统计在used_memory中。内存碎片的产生与对数据进行的操作、数据的特点等都有关

如果内存分配器设计合理,可以尽可能的减少内存碎片的产生。
如果Redis服务器中的内存碎片已经很大,可以通过安全重启的方式减小内存碎片:因为重启之后,Redis重新从备份文件中读取数据,在内存中进行重排,为每个数据重新选择合适的内存单元,减小内存碎片。

相关文章

  • 02-Redis内存划分

    Redis作为内存数据库,在内存中存储的主要内容是数据(键值对) 数据 数据是Redis中存储的主要内容,这部分占...

  • JAVA 一维数组

    数组 JVM内存划分 A:内存划分 JVM对自己的内存划分为5个区域 * a: 寄存器:内存和CUP之间 * b:...

  • 内存划分

    静态储存区 内存在程序编译的时候就已经分配好,这快内存在程序的整个运行期间都存在。它主要存在静态数据、全局数据和常...

  • 2018-08-22

    数组内存空间的划分、栈内存

  • 内存区域划分

    Java内存分配主要包括以下几个区域: 寄存器:我们在程序中无法控制 栈:存放基本类型的数据和对象的引用,但对象本...

  • jvm内存划分

    在整个程序执行过程中,JVM会用一段空间来存储程序执行期间需要用到的数据和相关信息,这段空间一般被称作为Runti...

  • jvm内存划分

    jvm内存共分为虚拟机栈,堆 ,方法区,程序计数器,本地方法区五个部分。 程序计数器(线程私有): 是当前线程所执...

  • Java 内存划分

    当程序运行时在内存中开辟空间 当程序完成结束后内存空间被释放,将不占用内存空间.

  • 内存的划分

    1、栈内存中存储的是局部变量,变量所处的作用域一旦结束,该变量就自动释放 2、堆内存中存储的是数组和对象(其实数组...

  • 内存的划分

    1. 寄存器。 2. 本地方法区。 3. 方法区:成员变量存储在堆内存的对象中,所以也叫对象的特有数据。静态变量数...

网友评论

      本文标题:02-Redis内存划分

      本文链接:https://www.haomeiwen.com/subject/ffoiuhtx.html