Redis中的list和set结构
一、list基本操作
单键多值:
列表是简单的字符串列表,按照插入顺序排序,可以添加一个元素到列表的头部(左边)或者尾部(右边),底层是一个双向链表
- lpush/rpush:从左边/右边插入一个或多个值
lpush k1 v1 v2 v3
- lpop/rpop:从左边/右边取一个值(值光键亡)
lpop k1
- rpoplpush:从一个list的右边复制到另一个list的左边
rpoplpush k1 k2
二、list底层存储结构
List的数据结构为quickList
如果是列表中元素较少的时候,会使用一块连续的内存存储,这个结构是ziplist即压缩列表。
当元素较多时,将多个压缩列表加上指针首尾相连构成quicklist,不直接使用quicklist是因为指针太多会浪费空间。
三、Set基本操作
set是可以自动排重的,且是无序的。
底层就是一个value为null的哈希表,添加删除查找复杂度都是O(1)。
- sadd:添加元素到集合key中
sadd k4 v1 v2 v3
- smembers: 取出该集合中的所有值
smembers k4
- sismember: 判断是否有对应的值
sismember k4 v1
存在就返回1,不存在返回0
- scard: 返回元素个数
scard k4
- srem: 删除集合中的元素
srem k4 v1 v2
- spop:随机从集合中取出一个值
spop k4
未完待续吧,太多了。。。。
四、Set底层储存结构
set的底层数据结构是dict(字典),其底层的数据结构是用哈希表实现的。