The Generic Set Implementation
- Code Path:
src/t_set.c
It’s a wrapper around the actual set type. The set can be one of the following types:
- An
intset. Even if the member is a string, Redis will try to convert it to an integer withstring2ll. - A
listpack. Used for small sets. - A
dict. Used for large sets.
Listpack Implementation
The same implementation of hash type.
Dict Implementation
The same implementation of hash type.
Intset Implementation
- Code Path:
src/intset.c
An intset is a dense sorted array with multiple levels of encoding for different sizes of integers.
- All integers are sorted, before inserting or deletion, you need a binary search to locate it.
- Before inserting, call
zreallocto allocate one more slot. - Before deletion, find the position of the element and
memmovethe slots following the position.