Redis学习笔记-Redis中的数据结构

这篇博客深入探讨Redis的五大数据类型:String(使用SDS实现,具有二进制安全性及常数复杂度获取长度)、Hash(适合存储对象,增删操作平均O(1),内部采用哈希表或zipmap存储)、List(使用quicklist结构,结合了双向链表和ziplist的优点,适用于队列操作)、Set(无序且唯一,内部编码为intset或hashtable)和Sorted Set(有序集合,可按score排序,内部使用ziplist或skiplist)。文章详细解释了每种数据结构的特性和应用场景。
摘要由CSDN通过智能技术生成

Redis中的五种常见的数据类型:
字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)
在这里插入图片描述

本篇文章详细学习一下这五种数据类型对应的数据结构

字符串(String)

字符串类型是Redis最基础的数据结构,它的值可以为字符串、数字,二进制(图片、音频、视频)等。

Redis是用C语言写的,但它并没有使用C的字符串表示,而是自己构建了一种简单动态字符串(simple dynamic string,SDS)的抽象类型,作为Redis的默认字符串表示;

SDS定义

SDS的结构定义在sds.h文件中,SDS的定义在Redis 3.2版本之后有一些改变,由一种数据结构变成了5种数据结构,会根据SDS存储的内容长度来选择不同的结构,以达到节省内存的效果

// 3.0
struct sdshdr {
   
    // 记录buf数组中已使用字节的数量,即SDS所保存字符串的长度
    unsigned int len;
    // 记录buf数据中未使用的字节数量
    unsigned int free;
    // 字节数组,用于保存字符串
    char buf[];
};

// 3.2
/* Note: sdshdr5 is never used, we just access the flags byte directly.
 * However is here to document the layout of type 5 SDS strings. */
struct __attribute__ ((__packed__)) sdshdr5 {
   
    unsigned char flags; /* 3 lsb of type, and 5 msb of string length */
    char buf[];
};
struct __attribute__ ((__packed__)) sdshdr8 {
   
    uint8_t len; /* used */
    uint8_t alloc; /* excluding the header and null terminator */
    unsigned char flags; /* 3 lsb of type, 5 unused bits */
    char buf[];
};
struct __attribute__ ((__packed__)) sdshdr16 {
   
    uint16_t len; /* used */
    uint16_t alloc; /* excluding the header and null terminator */
    unsigned char flags
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值