第 2 章 · 五大基础数据类型

三个交互演示:① 命令沙盒 · ② Hash 编码切换 · ③ 跳表查找

在浏览器里跑 Redis 命令(无需真实 Redis)

这是一个迷你 Redis 模拟器,支持五大类型的核心命令。点左侧切换类型查看示例:


127.0.0.1:6379>
支持命令:SET/GET/INCR/APPEND/STRLEN · LPUSH/RPUSH/LPOP/RPOP/LRANGE/LLEN · HSET/HGET/HGETALL/HDEL/HLEN · SADD/SREM/SMEMBERS/SINTER · ZADD/ZRANGE/ZREVRANGE/ZINCRBY/ZSCORE · DEL/KEYS/TYPE/OBJECT

Hash 编码切换:listpack ↔ hashtable

不停往 Hash 里加字段,观察什么时候从紧凑的 listpack 升级为 hashtable。两个阈值都可调:

📦 listpack(紧凑)

状态:激活 字段数:0 最大值长度:0

[field1, value1, field2, value2, ...] 紧密相邻,O(N) 查找但 N 小、缓存友好

🗃 hashtable(哈希表)

状态:未激活 桶数:0 装载因子:0.0

数组 + 链表,O(1) 查找。装载因子 ≥ 1 时触发 rehash(扩容到 2 倍)

升级条件:字段数 > 阈值 任一值长度 > 阈值,从 listpack 升级到 hashtable。注意:升级不可逆!

跳表(Skip List):ZSet 的灵魂

插入随机分数,观察跳表如何利用「多层索引」加速查找。点「查找」可以看完整搜索路径:

点击「查找」看搜索路径,或先插入几个元素
跳表的精妙之处:每个节点的层数靠抛硬币决定(1/2 概率),上层稀疏下层稠密。查找时从最高层开始「往右走,走不动就下楼」,复杂度 O(log N)。比红黑树更适合 ZSet 的范围查询场景。