Redis List类型
Redis的List类型有两种编码:zipList和linkedList
zipList中所有的节点都是连续的在内存中排列的,加载速度快,zipList结构设计也是为了节约内存空间,但是不适合存储大量的节点
linkedList是链表结构,逻辑连续,在内存中可能是分散到各个内存空间碎片中的,因为不要求内存一定要连续,所以适合存储大量的节点
编码转换条件
- 列表中所有节点的长度都小于64字节
- 列表对象保存的节点数量小于512个
命令详解
-
LPUSH:在头部添加1个或多个节点,当key不存在时,创建一个List并将节点添加进去,否则直接在原有key的List上添加。
LPUSH <key> <elem> [elem ..]
LPUSH a 1 2 3
-
LRANGE:查看指定范围的节点,0:开始位置,-1:结束位置,
LRANGE <key> <startIndex> <stopIndex>
LRANGE a 0 -1 // 3 2 1
发现取出来的顺序和存放的顺序是反的,因为LPUSH每次添加的节点都会在List的头部添加,后加的节点反而在最前面
-
LLEN:求List的长度,
LLEN <key>
LPUSH a 1 2 3 LLEN a // 3
-
LPUSHX:只有key存在的时候才能往里面放节点,
LPUSHX <key> <elem> [elem ..]
LPUSHX b 1 2 3 // 返回0 LRANGE b 0 -1 // (empty array)
-
LPOP:返回左边(首部)第一个节点,
LPOP <key>
LPUSH a 1 2 3 LPOP a // 3
-
RPOP:返回右边(尾部)第一个节点,语法和LPOP一样,
RPOP <key>
-
BLPOP:阻塞式弹出头部节点,必须带有超时时间(timeout),单位为秒,如果List中有节点就立即返回,如果没有就阻塞timeout秒,直到有数据插入就立即返回。如果指定多个key,只要有一个key指向的List里面有数据就立即返回,
BLPOP <key> [key ..] <timeout>
BLPOP a 1 // 如果没有数据,阻塞1秒,否则立即返回 ------------ LPUSH a 1 // 可以开启另一个终端,向a里面放数据,这时候被BLPOP阻塞的终端检测到a有数据进来了,就立即返回
-
BRPOP:阻塞时在尾部弹出一个节点,用法和BLPOP一样,
BRPOP <key> [key ..] timeout
-
BRPOPLPUSH:阻塞时在尾部弹出一个节点,并加入到另一个List的头部,相当于BRPOP+RPOPLPUSH的结合体,
BRPOPLPUSH <source> <destination> <timeout>
-
RPUSH:在右边(尾部)插入一个或多个节点,和LPUSH语法一样,
RPUSH <key> <elem> [elem ..]
-
RPUSHX:在右边(尾部)插入一个或多个节点,和LPUSHX语法一样,
RPUSHX <key> <elem> [elem ..]
-
RPOPLPUSH:在List尾部弹出一个节点并加到另一个List的头部,如果另一个List不存在则创建,
RPOPLPUSH <source> <destination>
LPUSH a 1 2 RPOPLPUSH a b LRANGE a 0 -1 // 2 LRANGE b 0 -1 // 1
-
LREM:删除List重复的n个节点,
LREM <key> <count> <elem>
LPUSH a 1 2 1 2 3 LREM a 2 1 // 删除2个重复的1 LRANGE a 0 -1 // 3 2 2
-
LINDEX:获取指定下标的节点,
LINDEX <key> <index>
LPUSH a a b c LINDEX a 1 // b
-
LINSERT:在节点(positionElem)的前面(BEFORE)还是后面(AFTER)插入一个节点(insertElem),
LINSERT <key> BEFORE|AFTER <positionElem> <insertElem>
LPUSH a 1 2 3 LINSERT a BEFORE 2 12 LRANGE a 0 -1 // 3 12 2 1
-
LSET:设置指定下标节点的新值,
LSET <key> <index> <elem>
LPUSH a 1 2 3 LSET a 2 22 LRANGE a 0 -1 // 3 2 22
-
LTRIM:将原有List裁剪成指定范围的List,
LTRIM <key> <start> <end>
LPUSH a 1 2 3 4 5 LTRIM a 0 2 LRANGE a 0 -1 // 5 4 3