主要从事Linux,云原生架构改造,服务网格,ELK,python,golang等相关技术。
分类: NOSQL
2015-06-04 17:31:48
List类型及操作
List是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等,操作中key理解为链表名字。Redis的list类型其实就是一个每个子元素都是string类型的双向链表。我们可以通过push、pop操作从链表的头部或者尾部添加删除元素,这样list既可以作为栈,又可以作为队列。
lpush
在key对应list的头部添加字符串元素。
127.0.0.1:6379> lpush mylist "world"
(integer) 1
127.0.0.1:6379> lpush mylist "hello"
(integer) 2
127.0.0.1:6379> lrange mylist 0 1
1) "hello"
2) "world"
rpush
在key对应list的尾部添加字符串元素。
127.0.0.1:6379> lpush mylist "world"
(integer) 1
127.0.0.1:6379> lpush mylist "hello"
(integer) 2
127.0.0.1:6379> lrange mylist 0 1
1) "hello"
2) "world"
linsert
在key对应list的特定位置前或后添加字符串
127.0.0.1:6379> rpush mylist3 "world"
(integer) 1
127.0.0.1:6379> linsert mylist3 before "world" "hello" 在world的前面压入一个hello
(integer) 2
127.0.0.1:6379> LRANGE mylist3 0 -1
1) "hello"
2) "world"
Lset
设置list中指定下标的元素值。
127.0.0.1:6379> rpush mylist4 "hello"
(integer) 1
127.0.0.1:6379> lset mylist4 0 "world"
OK
127.0.0.1:6379> lrange mylist4 0 -1
1) "world"
下面我们看一下这个替换的例子
127.0.0.1:6379> lpush list5 one
(integer) 1
127.0.0.1:6379> lpush list5 two
(integer) 2
127.0.0.1:6379> lpush list5 three
(integer) 3
127.0.0.1:6379> lrange list5 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> lset list5 1 four 这里我们将第二个元素换掉
OK
127.0.0.1:6379> lrange list5 0 -1
1) "three"
2) "four"
3) "one"
lrem
从key对应list中删除n个和value相同的元素。(n<0从尾删除,n=0全部删除)
127.0.0.1:6379> rpush mylist5 "hello"
(integer) 1
127.0.0.1:6379> rpush mylist5 "hello"
(integer) 2
127.0.0.1:6379> lrem mylist5 1 "hello"
(integer) 1
127.0.0.1:6379> lpush list5 one
(integer) 4
127.0.0.1:6379> lpush list5 one
(integer) 5
127.0.0.1:6379> lpush list5 one
(integer) 6
127.0.0.1:6379> lrange list5 0 -1
1) "one"
2) "one"
3) "one"
4) "three"
5) "four"
6) "one"
127.0.0.1:6379> lrem list5 3 "one" 删除三个”one“
(integer) 3
ltrim
保留指定key的值范围内的数据
127.0.0.1:6379> rpush mylist8 "one"
(integer) 1
127.0.0.1:6379> rpush mylist8 "two"
(integer) 2
127.0.0.1:6379> ltrim mylist8 1 -1
OK
127.0.0.1:6379> lrange mylist8 0 -1
1) "two"
lpop
从list的头部删除元素,并返回删除元素
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "world"
127.0.0.1:6379> lpop mylist
"hello"
127.0.0.1:6379> lrange mylist 0 -1
1) "world"
rpop
从list的尾部删除元素,并返回删除元素
127.0.0.1:6379> lrange mylist2 0 -1
1) "world"
2) "hello"
127.0.0.1:6379> rpop mylist2
"hello"
127.0.0.1:6379> lrange mylist2 0 -1
1) "world"
rpoplpush
从第一个list的尾部移除元素并添加到第二个list的头部。
127.0.0.1:6379> lrange mylist4 0 -1
1) "world"
127.0.0.1:6379> lrange mylist3 0 -1
1) "hello"
2) "world"
127.0.0.1:6379> rpoplpush mylist3 mylist4
"world"
127.0.0.1:6379> lrange mylist3 0 -1
1) "hello"
127.0.0.1:6379> lrange mylist4 0 -1
1) "world"
2) "world"
lindex
返回名称为key的list中index位置的元素
127.0.0.1:6379> lrange mylist4 0 -1
1) "world"
2) "world"
127.0.0.1:6379> lindex mylist4 0
"world"
127.0.0.1:6379> lindex mylist4 1
"world"
llen
返回key对应list的长度
127.0.0.1:6379> llen mylist4
(integer) 2
127.0.0.1:6379> llen mylist3
(integer) 1