前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >REDIS 不单纯的数据库结构

REDIS 不单纯的数据库结构

作者头像
AustinDatabases
发布2023-02-28 14:40:10
2200
发布2023-02-28 14:40:10
举报
文章被收录于专栏:AustinDatabasesAustinDatabases
数据库是一个处理数据的地方,包含了数据计算,数据存储,和数据转换等等,其中处理数据中,数据库结构和数据库库结构的种类,可以作为评判一个数据库某项指标好坏的关键。什么是一个好的数据结构,简单的说,方便数据访问,和管理的数据结构就是一个好的数据结构。

REDIS 本身虽然是一个缓存式数据库,但他在缓存式数据库中并不单纯,REDIS 本身支持很多数据库结构,通过使用不同的数据结构来简化代码提高开发的效率。

1 Strings 类型

REDIS Strings 类似是大多数存储使用的数据格式,REDIS 内部的整体的存储结构是如下图的hashmap ,内部是通过数组实现hash,每个dictEntry 是一个key value的对象,在dictEntry中包含 key 和value的指针,分别指向在其中存储的 key 和 value。

2 lists ,lists 类型用于保存插入到REDIS 中的数据的顺序,我们将其作为一种先进先出的数据存储方式。

redis list 数据结构地城采用压缩列表 ziplist 或者 linkedlist 两种数据结构进行存储,在ziplist 不满足数据存储要求的情况下,在使用linkedlist 存储。

这里列表对象所有字符串元素的长度小于64字节,列表对象保存的元素数量小于512 。在插入信息会先对这些信息进行判断,在超过这个标准后,会启用listedlist ,这里不同的是ziplist 是压缩格式,而listedlist 是双链表的格式。

3 hash ,redis 的hash 是一种数据类型,本身存储的是一组key value的值,并且

hash 作为redis 常用的数据库类型,其底层存储结构有两种实现的方式,当数据量较少的时候,会采用ziplist 来存储数据,使用这样的方式主要需要包含两个条件 哈希对象保存的键值对数量少于512 ,同时保存的键值对和值的长度要小于64个字节。

当存储的hash 值不符合这个特性的情况下,我们使用REDIS 就需要使用dict的结构了,这个结构类似与java 的hashmap,是一个无序的数据和里边表结合的方式,如上面的图中所示,存储数据的结构是dict,字典结构的数据存储方式通过哈希表算法实现,查找性能为0(1) .

哈希表主要的工作原理是将数据映射到数据组中的定义位置,通过数组的下标来访问数据,从而提高数据的查找效率。

4 集合set 数据存储结构

redis 的 set 和list 都可以存储多个字符串,list 上面说过,可以存储的值是有序的可重复的,而set 是无序的不可重复的。在使用 set 的情况下,在我们使用的过程中,也根据数据的情况划分存储的方式,在数据量少和所有的元素都是整数的情况下,使用intset 的方式来进行数据存储,而如果不满足这个条件,则使用hashtable来进行数据的存储。通过二分查找的方式来进行数据的存取。

代码语言:javascript
复制
typedef struct intset {
    
    // 编码方式
    uint32_t encoding;

    // 集合包含的元素数量
    uint32_t length;

    // 保存元素的数组
    int8_t contents[];

} intset;

5 sorted sets

sorted set 与 sets 之间最大的不同就是顺序性,其中这个结构中包含两个数据结构 dict, 和 zskiplist ,zskiplist 结构体中有四个元素,包含 头 和 尾, 整个链表的长度,以及最大的跳表的层数。

跳表产生的主要原因是,数据搜寻的效率的问题,在节点过多的情况下如果搜寻整个节点列中的靠后的节点,则是一个消耗较大的操作。为了解决这个问题,使用了跳表的方式来进行数据的查询。使用跳表的组要原因是实现的方式比较简单,不需要过多的算法代码等,在数据量不是太大的情况下,跳表的算法实现和使用的成本低效率高。同时根据在REDIS 中查找数据的通常的处理方法,一般是不使用范围查找的,而使用传统的数据库中的平衡树,或二叉树的算法,对于REDIS 中的数据查找并无好处,同时从内存占用的角度来看指针如果是传统的算法中 每个节点包含的指针数可以计算为 1/(1-p)而使用跳表的方式,则指针数可以表达为 p=1/4 相对指针数是固定的。

REDIS 数据库与传统的数据库最大的不同点是,REDIS 中的数据结构是面向,解决程序中的实际中的数据存储和数据查询,提高性能而产生的数据结构。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-01-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档