Redis设计核心-1-Redis底层数据结构总结1

前言

最近看了相关的Redis设计核心相关的书籍,对Redis有了一些小的认识,然后自己也做一些产出加深映象,我会从几个方面去总结Redis设计的核心内容:Redis底层数据结构总结、Redis高性能由哪些基础支撑、Redis应用场景、那些有趣的功能。

概述 

本篇主要内容是Redis底层数据结构总结。Redis供用户直接使用的数据结构有String、List、Set、Zset、Hash等结构,而这些结构下层又基于一些数据结构,这些数据结构被设计的非常优美,来提供了Redis高效的性能、低内存占用、多样的功能等,他们有Dict、RedisObject、SDS、ZipList、QuickList、Listpak、Skiplist,我将从是什么、为什么使用、设计思想、特点、实现结构几个方面去总结。


目录

前言

概述 

Dict

是什么

为什么使用

设计思想

特点

实现结构

RedisObject

是什么

为什么使用

设计思想

特点

实现结构

SDS

是什么

为什么使用SDS

设计思想

特点

实现结构

使用emb的好处

Ziplist

是什么

为什么使用

设计思想

特点

实现结构

为什么previous_entry_length要小于254?


 

Dict

是什么

Dict是一种查找结构,用来解决查询问题,是一种哈希散列表结构,采用拉链法解决哈希冲突,类似于JDK中HashTable但其特点是渐进式扩容,将单次指令触发扩容的时间分散到多次指令渐进扩容,避免了单次响应时间的剧烈波动,符合其响应效率的特点。

为什么使用

一般查找结构有常用的两种结构:1.各种平衡树,内部对数据排序,时间复杂度趋近于O(logn),但是需要维护其平衡结构,较耗费性能并且实现复杂,可执行标识查找和范围查询;2.哈希散列表结构,不对元素排序,通过hash()定位元素在数组上的位置,利用了数组的索引O(1)查找特点,快速定位元素,其实现相对简单但只提供标识查询,时间复杂度为O(1)。

设计思想

Dict是字典结构,采用了散列表结构,利用数组索引定位O(1)的特点来实现快速操作,但区别于JDK的散列表实现,Dict使用数组存储元素,拉链法解决hash冲突,并且最突出的是使用渐进式扩容。HashMap扩容是一次性同步扩容,既单次add指令导致元素数量达到临界点,触发同步全量扩容,导致单次的响应时间剧烈波动。而Dict是将一次指令的同步扩容分散到多次指令上,每次执行指令时都会触发一部分扩容,避免了单次响应时间的剧烈波动,这也是体现其设计核心--响应效率优先。

特点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值