Redis List,你真的了解吗?
文章来源:https://mp.weixin.qq.com/s/JQ-ph0rebFeOBQ54BxjGTw
我们上周已经经过了String的面试,相信大家对String也有了基本的认知。
我们知道,一个字符串可以用String表示,那么如果有成群结队的String,又用什么数据结构来表示呢?
今天我们就来认识一下这个数据结构——List。
1.是什么?
1.1 有什么限制
List大元素个数是 2^32 - 1 (4,294,967,295)。
2.适用场景
3. 常用操作
常用操作还是聚焦于创建、查询、更新和删除。
创建即产生一个List对象,一般用LPUSH、RPUSH,分别对应从左侧进队列和右侧进队列。
对于查询,可以用LRANGE来进行范围查询,可以用LLEN查询元素个数。
更新的话,对列表对象而言就是追加元素、删除元素等操作,涉及LPUSH, LPOP, RPUSH, RPOP等操作。
删除就是针对List对象本身的生成和销毁,用DEL命令。
3.1 写操作
3.1.1 LPUSH
功能:从头部增加元素,返回值为List中元素的总数。
127.0.0.1:6379> LPUSH listniuniu s1 s2 s3
(integer) 3
127.0.0.1:6379> LPUSH listniuniu s4
(integer) 4
3.1.2 RPUSH
功能:从尾部增加元素,返回值为List中元素的总数。
127.0.0.1:6379> RPUSH listniuniu s5
(integer) 5
3.1.3 LPOP
功能:移出并获取列表的个元素。
-
-
127.0.0.1:6379> LPOP listniuniu
"s4"
3.1.4 RPOP
127.0.0.1:6379> RPOP listniuniu
"s5"
3.1.5 DEL
功能:删除对象,返回值为删除成功了几行。
127.0.0.1:6379> DEL listniuniu
(integer) 1
3.2 读操作
我们使用如下命令,构造集合用于读操作的学习:
127.0.0.1:6379> DEL listniuniu
(integer) 1
127.0.0.1:6379> LPUSH listniuniu s1 s2 s3
(integer) 3
3.2.1 LLEN
功能:查看List的长度,即List中元素的总数。
-
-
127.0.0.1:6379> LLEN listniuniu
(integer) 3
3.2.2 LRANGE
功能:查看start到stop为角标的元素。
127.0.0.1:6379> LRANGE listniuniu 0 1
1) "s3"
2) "s2"
start、stop如果为负数,表示倒数第几个元素:
127.0.0.1:6379> LRANGE listniuniu -2 -1
1) "s2"
2) "s1"
4.底层实现
4.1 编码方式
4.2 QUICKLIST横空出世
4.3 ZIPLIST优化
总结
相关文章