Ch04 Data Structure
Yang Haoran 10/22/2023 redis
# Advanced
# SDS
- Redis定义了多种SDS来存放字符串(不同长度用不同的结构体)
# IntSet
在数据量不大的时候,存数字
在添加一个放不下的元素之后升级扩容
会确保元素的唯一,有序
底层采用二分查找、
# Dict
- used有可能大于size的大小,因为可能哈希冲突,一个key对应多个value(*next)
- union表示v可以是这四种类型中任意一种
- 为什么需要sizemask?hash的时候对size求余运算 == 和size -1 求与运算 【必须在size是2的n次方的情况下】
每次冲突的时候往队首加就可以,否则要遍历好多次
rehash
- 由于rehash可能数据量过大,主线程会很慢,所以采用渐进式
# ZipList
- 连锁更新问题
# QuickList
# SkipList
# RedisObject
- 编码方式就是用上面哪个数据结构来实现
# String
- EMBSTR:最好字符串不要超过44字节,这样就一共分配64字节,正好是redis申请内存的一个分片大小
# List
# Set
# ZSet
- 但是内存占用太高了
# Hash
# 过期策略
- 用了另一个dict来存,key和之前的一样,val存的是过期时间
# 淘汰策略
# 分片
# 缓存
# 为什么不用redis做消息队列
#
# redis备份
AOF