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


# 主从

# 容灾

