首页 > 编程知识 正文

redis数据类型的数据结构,redis查询实时数据

时间:2023-05-06 18:27:38 阅读:31304 作者:4820

说到Redis的数据结构,首先考虑什么? 脱口而出的当然是String、List、Map、Set、Sorted Set,实际上它们是Redis暴露于外部的键值对的值,使用Redis通常被视为k、v型数据库,但那么,在Redis中这些常见的数据类型是如何实现的呢? 接下来看看吧。

对于String在Redis基础上的实现,用简单的动态字符串这一个数据结构来实现,其他几个数据结构基础分别用两个数据结构来实现。 除了String以外的其他四种数据结构可以统称为集合,那么在什么情况下针对不同的数据结构实现呢? 下图是总结的

在这里,我平时很少提到简单的动态字符串。 Redis不采用传统的字符串实现方式,而是自己实现了字符串结构。 简单字符串的结构如下图所示

这里需要说明几个字段。 zlbytes、zltail、zllen。 这前三个字段zlbytes表示列表的长度,zltail表示列表末尾的偏移,zllen表示列表中的条目数,列表末尾的zlend表示列表末尾。 有这些字段。 是我们可以在o(1)的时间内查找的列表的头和尾节点。 由于此数据结构非常紧凑,没有额外的字段,因此大大节省了内存开销,连续的存储结构适用于cup缓存。

那么,Redis的基础为什么要制作这么多数据结构来实现数据的存储呢? 其实这里还是为了寻找时间和空间的平衡。 如果数据量不大(通常是相对较小的值),则使用压缩可以节省内存空间;但是,即使数据量较大,仍然使用此压缩格式也会降低查询效率。 在这种情况下,可以使用哈希表中的跳表等结构来提高查询效率。

上面介绍的这些数据结构都是Redis的v,使用Redis时都以key value的形式进行操作。 因此,Redis内部有一个全局哈希表。 准确地说,两个,另一个必须用于扩展。 在key的散列算法中找到的对应数组的表,以及数组包含entry的引用对象。 的entry对象后,entry对象内部包含key和用于操作集合的对象引用地址(value ),以便您可以在找到value后处理集合对象。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。