本文共 3711 字,大约阅读时间需要 12 分钟。
操作系统: ubuntu-16.04-x64redis版本: 4.0.9
List类型可以存储一个字符串列表,常用的操作是在两端添加弹出元素或者获得列表的一个片段。
List类型内部是使用双向链表实现的,所以向List两端添加元素的时间复杂度是O(1),通过索引获取元素的时间复杂度是O(n)。 List类型还可以作为队列来使用。与Hash类型键值最多能容纳的字段数量相同,一个List类型键最多容纳2^32 - 1个元素。1.向List两段增加元素
LPUSH key value [value ...] #向List左边增加元素RPUSH key value [value ...] #向List右边增加元素
例:
127.0.0.1:6379> LPUSH list1 1(integer) 1127.0.0.1:6379> RPUSH list1 2 3 4 (integer) 4
2.从List两段弹出元素
LPOP key #从List左边弹出元素 RPOP key #从List右边弹出元素
例:
127.0.0.1:6379> LPUSH list1 1 2 3 4 5 (integer) 5127.0.0.1:6379> LPOP list1"5"127.0.0.1:6379> RPOP list1"1"
3.获取List元素的个数
LLEN key
例:
127.0.0.1:6379> LPUSH list1 1 2 3 4 5 6(integer) 6127.0.0.1:6379> LLEN list1(integer) 6
4.获得List片段
LRANGE key start stop
例:
List 正向(从左到右)索引从0开始,最大为List长度减1。127.0.0.1:6379> LPUSH list1 1 2 3 4 5 6(integer) 6127.0.0.1:6379> LRANGE list1 0 21) "6"2) "5"3) "4"
List反向(从右到左)索引从-1开始表示倒数第一个元素,-2表示倒数第二个元素,以此类推。
127.0.0.1:6379> LPUSH list1 1 2 3 4 5 6(integer) 6127.0.0.1:6379> LRANGE list1 -3 -1 1) "3"2) "2"3) "1"
LRANGE key 0 -1可以获取List中所有的所有元素。另外还有一些特殊情况:
(1)如果start的索引位置比stop的索引位置靠后,则会返回空List。127.0.0.1:6379> LPUSH list1 1 2 3 4 5 6(integer) 6127.0.0.1:6379> LRANGE list1 3 0(empty list or set)
(2)如果stop大于实际的索引范围,则会返回到列表最右边的元素。
127.0.0.1:6379> LPUSH list1 1 2 3 4 5 6(integer) 6127.0.0.1:6379> LRANGE list1 0 1001) "6"2) "5"3) "4"4) "3"5) "2"6) "1"
5.删除List中指定的值
LREM key count value
LREM命令会删除List中前count个值为value的元素,返回值是实际删除的个数。根据count值得不同,LREM命令的执行方式略有差异。
1.当count > 0时LREM命令会从List左边开始删除前count个值为value的元素
2.当count < 0时LREM命令会从List右边开始删除前| count |个值为value的元素。 3.当count = 0是LREM命令会删除所有值为value的元素。 例:127.0.0.1:6379> LPUSH list1 0 2 3 2 3 4 (integer) 6127.0.0.1:6379> LRANGE list1 0 -11) "4"2) "3"3) "2"4) "3"5) "2"6) "0"127.0.0.1:6379> LREM list1 1 3(integer) 1127.0.0.1:6379> LRANGE list1 0 -11) "4"2) "2"3) "3"4) "2"5) "0"127.0.0.1:6379> LPUSH list1 0 2 3 2 3 4 (integer) 6127.0.0.1:6379> LRANGE list1 0 -11) "4"2) "3"3) "2"4) "3"5) "2"6) "0"127.0.0.1:6379> LREM list1 -1 2(integer) 1127.0.0.1:6379> LRANGE list1 0 -11) "4"2) "3"3) "2"4) "3"5) "0"127.0.0.1:6379> LPUSH list1 0 2 3 2 3 4 (integer) 6127.0.0.1:6379> LRANGE list1 0 -11) "4"2) "3"3) "2"4) "3"5) "2"6) "0"127.0.0.1:6379> LREM list1 0 2(integer) 2127.0.0.1:6379> LRANGE list1 0 -11) "4"2) "3"3) "3"4) "0"
6.获得/设置指定索引的元素值
LINDEX key indexLSET key index value
LINDEX元素返回指定索引的元素。正索引(从左到右)从0开始,负索引从(从右到左)从-1开始。
127.0.0.1:6379> LPUSH list1 1 2 3 4 5 6 7(integer) 7127.0.0.1:6379> LINDEX list1 1"6"127.0.0.1:6379> LINDEX list1 -1"1"
LSET将索引为index的元素赋值为value
127.0.0.1:6379> LPUSH list1 1 2 3 4 5 6(integer) 6127.0.0.1:6379> LRANGE list1 0 -11) "6"2) "5"3) "4"4) "3"5) "2"6) "1"127.0.0.1:6379> LSET list1 0 10OK127.0.0.1:6379> LRANGE list1 0 -11) "10"2) "5"3) "4"4) "3"5) "2"6) "1"
7.只保留列表指定片段
LTRIM key start stop
LTRIM命令可以删除指定索引范围之外的所有元素。
例:127.0.0.1:6379> LPUSH list1 1 2 3 4 5 6 7(integer) 7127.0.0.1:6379> LRANGE list1 0 -11) "7"2) "6"3) "5"4) "4"5) "3"6) "2"7) "1"127.0.0.1:6379> LTRIM list1 0 1OK127.0.0.1:6379> LRANGE list1 0 -11) "7"2) "6"
8.向列表中插入元素
LINSERT key BEFORE|AFTER pivot value
LINSERT命令首先会在List中从左到右查找值为pivot的元素,然后根据第二个参数是BEFORE还是AFTER将数据value插入到该元素的前面还是后面。
LINSERT返回插入后列表的个数。例:
127.0.0.1:6379> LPUSH list1 1 2 3 4 5 6(integer) 6127.0.0.1:6379> LINSERT list1 AFTER 3 3.5(integer) 7127.0.0.1:6379> LRANGE list1 0 -11) "6"2) "5"3) "4"4) "3"5) "3.5"6) "2"7) "1"
9.将元素从一个列表转到另一个列表
RPOPLPUSH source destination
RPOPLPUSH这个命令从名字可以看出其功能:先执行RPOP命令再执行LPUSH命令。它先从source列表类型键的右边弹出一个元素,然后再将其加入到destination列表类型键的右边,并返回这个元素的值,该过程是原子的。
例:127.0.0.1:6379> LPUSH list1 1 2 3 4 5 6(integer) 6127.0.0.1:6379> LRANGE list1 0 -11) "6"2) "5"3) "4"4) "3"5) "2"6) "1"127.0.0.1:6379> RPOPLPUSH list1 list2"1"127.0.0.1:6379> LRANGE list2 0 -11) "1"
转载地址:http://agcmb.baihongyu.com/