(数据结构在文章后面)
1.字符串对象(string) 命令:set
底层: int (数据为整型),raw(SDS简单动态字符串),embstr(数据小于32字节,本质也是SDS,但是底层空间是连续的)
2.列表对象(list) rpush
早期版本:ziplist或linkedlist
新版本 quicklist(linkedlist和ziplist的合体版)
3.哈希对象(hash) hmset
ziplist(键对值的键和值的长度都是小于64字节并且键对值数量小于512)或者hashtable(字典)
4.集合对象(set) sadd
intset(集合中所有元素都是整数并且元素数量小于512个)或hashtable
5.有序集合(zset) zadd
ziplist(有序集合中元素小于128个并且所有元素的长度都小于64字节)和skiplist(跳表)
redis一个database中所有key到value的映射,就是使用一个dict来维护.
dict采用哈希函数对key取哈希值得到在哈希表中的位置(桶的位置),采用拉链法解决hash冲突。
数据结构:
SDS
linkedArrayList 双向链表
hashTable 类java7 hashMap
skiplist 跳表 (多层级顺序链表快速查询)
压缩列表(ziplist)
是Redis为了节省内存而开发的,是由一系列特殊编码的连续内存块组成的顺序型数据结构,一个压缩列表可以包含任意多个节点(entry),每个节点可以保存一个字节数组或者一个整数值。
quicklist (ziplist和linkedlist的混合体)