白话 Redis - 数据结构一般都有两种实现的本质

10 阅读1分钟

前言

都知道 Redis 有动态字符串、列表、集合、有序集合、哈希五种常用的数据结构,但是除了字符串外,其余底层一般都有两种实现,这要解决什么问题?

答案

解决内存碎片 与 性能 之间的权衡效率。

分析

使用哪一种实现取决于数据量。

当数据量比较少的时候,会采用紧凑内存的数据结构。一方面是可以减少内存碎片,在删除时性能也高些,另一方面,数据量少的情况下,插入数据、变更数据性能恶化的不明显。

当数据量比较大时,内存紧凑类型就会出现性能问题了。比如 ziplist插入数据会涉及到内存移动、级联更新的问。此时就必须采用一个正经的数据结构了。