Redis 内存模型

1. 当我们执行set hello world命令时,会有以下数据模型

  A. sds:sds是简单动态字符串,键hello是以SDS存储的;

  B. redisobject:值world存储在redisobject中,实际上,redis的5中类型都是存在redisobject中,而redisobject中type字段指明了value对象的类型,ptr字段则指明了对象所在的地址,该对象非常重要,Redis对象的类型、内部编码、内存回收、共享对象等功能,都需要redisobject支持;

  C. dictEntry:Redis给每个key-value键值对分配一个dictEntry,里面有着key和val的指针,next指向下一个dictEntry形成链表,这个指针可以将多个哈希值相同的键值对链接在一起;

  D. 无论是dictEntry,还是redisobject、sds对象,都需要内存分配器(如jemalloc分配)内存进行存储,jemalloc在64位操作系统中,将内存空间划分为小、中、巨大三个范围,每个范围又划分了许多小的内存块单元,当Redis存储数据时,会选择大小最合适的内存块进行存储;

  E. Redis支持的5种对象类型,每种结构都至少有两种编码。

2. 优化内存占用

  A. 尽量使用整形替代字符串;

  B. 尽可能使用共享对象;

  C. 关注内存碎片比例;

原文地址:https://www.cnblogs.com/ruhuanxingyun/p/12228361.html

时间: 2024-10-10 01:49:52

Redis 内存模型的相关文章

精讲Redis内存模型

前言 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分. 我们使用Redis时,会接触Redis的5种对象类型(字符串.哈希.列表.集合.有序集合),丰富的类型是Redis相对于Memcached等的一大优势.在了解Redis的5种对象类型的用法和特点的基础上,进一步了解Redis的内存模型,对Redis的使用有很大帮助,例如: 1.估算Redis内存使用量.目前为止,内存的使用成本仍然相对较高,使用内存不能无所顾

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

前言 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分. 我们使用Redis时,会接触Redis的5种对象类型(字符串.哈希.列表.集合.有序集合),丰富的类型是Redis相对于Memcached等的一大优势.在了解Redis的5种对象类型的用法和特点的基础上,进一步了解Redis的内存模型,对Redis的使用有很大帮助,例如: 1.估算Redis内存使用量.目前为止,内存的使用成本仍然相对较高,使用内存不能无所顾

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

原文:深入学习Redis(1):Redis内存模型 前言 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分. 我们使用Redis时,会接触Redis的5种对象类型(字符串.哈希.列表.集合.有序集合),丰富的类型是Redis相对于Memcached等的一大优势.在了解Redis的5种对象类型的用法和特点的基础上,进一步了解Redis的内存模型,对Redis的使用有很大帮助,例如: 1.估算Redis内存使用量.目前

Redis内存模型及应用解读 读后随笔

文章出处: Redis内存模型及应用解读 https://dbaplus.cn/news-158-2127-1.html 第一部分:Redis内存统计 随笔:这一部分略显枯燥,是通过redis-cli连接redis后对于info命令的结果字段解读,属于较底层的部分,熟悉redis在操作系统中的实现会更容易理解这部分. 这段对于我的帮助 1.redis进程运行本身会需要内存和内存碎片,同时redis中还存在虚拟内存 2.mem_fragmentation_ratio表示内存碎片比率,mem_fra

一文带你深入了解 Redis 内存模型

作者:编程迷思 链接:https://www.cnblogs.com/kismetv/p/8654978.html 前言 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分. 我们使用Redis时,会接触Redis的5种对象类型(字符串.哈希.列表.集合.有序集合),丰富的类型是Redis相对于Memcached等的一大优势.在了解Redis的5种对象类型的用法和特点的基础上,进一步了解Redis的内存模型,对Red

深入了解一下Redis的内存模型!

跳跃表是一种有序数据结构,通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的.除了跳跃表,实现有序数据结构的另一种典型实现是平衡树:大多数情况下,跳跃表的效率可以和平衡树媲美,且跳跃表实现比平衡树简单很多,因此redis中选用跳跃表代替平衡树.跳跃表支持平均O(logN).最坏O(N)的复杂点进行节点查找,并支持顺序操作.Redis的跳跃表实现由zskiplist和zskiplistNode两个结构组成:前者用于保存跳跃表信息(如头结点.尾节点.长度等),后者用于表示跳跃表节

Redis 内存使用优化与存储

Redis 常用数据类型Redis 最为常用的数据类型主要有以下五种:• String• Hash• List• Set• Sorted set在具体描述这几种数据类型之前,我们先通过一张图了解下 Redis 内部内存管理中是如何描述这些不同数据类型的:首先 Redis 内部使用一个 redisObject 对象来表示所有的 key 和 value,redisObject 最主要的信息如上图所示:... Redis 常用数据类型 Redis 最为常用的数据类型主要有以下五种: • String

Redis内存使用优化与存储

在具体描述这几种数据类型之前,我们先通过一张图了解下Redis内部内存管理中是如何描述这些不同数据类型的: 首先Redis内部使用一个redisObject对象来表示所有的key和value,redisObject最主要的信息如上图所示:type代表一个value对象具体是何种数据类型,encoding是不同数据类型在redis内部的存储方式,比如:type=string代表value存储的是一个普通字符串,那么对应的encoding可以是raw或者是int,如果是int则代表实际redis内部

redis内存管理代码的目光

zmalloc.h /* zmalloc - total amount of allocated memory aware version of malloc() * * Copyright (c) 2009-2010, Salvatore Sanfilippo <antirez at gmail dot com> * All rights reserved. * * Redistribution and use in source and binary forms, with or with