Redis lists操作
list 是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等,操作中key理解为链表的名字。
Redis的list 类型其实就是一个每个子元素都是string类型的双向链表。链表的最大长度是(2
的32次方)。我们可以通过push,pop操作从链表的头部或者尾部添加删除元素。这使得list
既可以用作栈,也可以用作队列。
有意思的是list 的pop操作还有阻塞版本的,当我们pop一个list 对象时,如果list 是空,
或者不存在,会立即返回nil。但是阻塞版本的bpop可以则可以阻塞,当然可以加超时时
间,超时后也会返回nil。为什么要阻塞版本的pop呢,主要是为了避免轮询。举个简单的
例子如果我们用list 来实现一个工作队列。执行任务的thread可以调用阻塞版本的pop去获
取任务这样就可以避免轮询去检查是否有任务存在。当任务来时候工作线程可以立即返回,
也可以避免轮询带来的延迟。
redis 127.0.0.1:6379> lpush mylist "world" 从头部往list中添加数据
(integer) 1
redis 127.0.0.1:6379> lpush mylist "hello"
(integer) 2
redis 127.0.0.1:6379> lrange mylist 0 -1 获取list中的全部数据
1) "hello"
2) "world"
redis 127.0.0.1:6379> rpush mylist2 "hello" 从尾部往list中添加数据
(integer) 1
redis 127.0.0.1:6379> rpush mylist2 "world"
(integer) 2
redis 127.0.0.1:6379> lrange mylist2 0 -1
1) "hello"
2) "world"
redis 127.0.0.1:6379> rpush mylist3 hello
(integer) 1
redis 127.0.0.1:6379> rpush mylist3 world
(integer) 2
redis 127.0.0.1:6379> linsert mylist3 before world there 往list中指定位置插入数据
(integer) 3
redis 127.0.0.1:6379> lrange mylist3 0 -1
1) "hello"
2) "there"
3) "world"
redis 127.0.0.1:6379> rpush mylist4 one
(integer) 1
redis 127.0.0.1:6379> rpush mylist4 two
(integer) 2
redis 127.0.0.1:6379> rpush mylist4 three
(integer) 3
redis 127.0.0.1:6379> lset mylist4 0 four 根据下标索引往list中插入数据
OK
redis 127.0.0.1:6379> lset mylist4 -2 five
OK
redis 127.0.0.1:6379> lrange mylist4 0 -1
1) "four"
2) "five"
3) "three"
redis 127.0.0.1:6379> rpush mylist5 hello
(integer) 1
redis 127.0.0.1:6379> rpush mylist5 hello
(integer) 2
redis 127.0.0.1:6379> rpush mylist5 foo
(integer) 3
redis 127.0.0.1:6379> rpush mylist5 hello
(integer) 4
redis 127.0.0.1:6379> lrem mylist5 2 hello 删除list中重复个数的数据,当个数大于0从头部删除,小于0从尾部删除,等于0删除全部,返回删除的个数
(integer) 2
redis 127.0.0.1:6379> lrange mylist5 0 -1
1) "foo"
2) "hello"
redis 127.0.0.1:6379> rpush mylist6 hello
(integer) 1
redis 127.0.0.1:6379> rpush mylist6 hello
(integer) 2
redis 127.0.0.1:6379> rpush mylist6 foo
(integer) 3
redis 127.0.0.1:6379> rpush mylist hello
(integer) 3
redis 127.0.0.1:6379> lrem mylist6 -1 hello
(integer) 1
redis 127.0.0.1:6379> lrange mylist6 0 -1
1) "hello"
2) "foo"
redis 127.0.0.1:6379> lrem mylist6 0 hello
(integer) 1
redis 127.0.0.1:6379> lrange mylist6 0 -1
1) "foo"
redis 127.0.0.1:6379> rpush mylist7 one
(integer) 1
redis 127.0.0.1:6379> rpush mylist7 two
(integer) 2
redis 127.0.0.1:6379> rpush mylist7 three
(integer) 3
redis 127.0.0.1:6379> rpush mylist7 four
(integer) 4
redis 127.0.0.1:6379> ltrim mylist7 1 -1 更具指定下标截取list中部分的数据
OK
redis 127.0.0.1:6379> lrange mylist7 0 -1
1) "two"
2) "three"
3) "four"
redis 127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "world"
3) "hello"
redis 127.0.0.1:6379> lpop mylist 从头部删除一个数据
"hello"
redis 127.0.0.1:6379> lrange mylist 0 -1
1) "world"
2) "hello"
redis 127.0.0.1:6379> lpop mylist
"world"
redis 127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
redis 127.0.0.1:6379> lpush mylist peng
(integer) 2
redis 127.0.0.1:6379> lpush mylist di
(integer) 3
redis 127.0.0.1:6379> lrange mylist 0 -1
1) "di"
2) "peng"
3) "hello"
redis 127.0.0.1:6379> rpop mylist 从尾部删除一个数据
"hello"
redis 127.0.0.1:6379> lrange mylist 0 -1
1) "di"
2) "peng"
redis 127.0.0.1:6379> lrange mylist1 0 -1
(empty list or set)
redis 127.0.0.1:6379> lrange mylist2 0 -1
1) "hello"
2) "world"
redis 127.0.0.1:6379> rpoplpush mylist mylist2 将list1中的数据从尾部删除,头部新增到list2中
"peng"
redis 127.0.0.1:6379> lrange mylist2 0 -1
1) "peng"
2) "hello"
3) "world"
redis 127.0.0.1:6379> lrange mylist 0 -1
1) "di"
redis 127.0.0.1:6379> lindex mylist5 0 获得指定下标的值
"foo"
redis 127.0.0.1:6379> llen mylist5 获得list的长度
(integer) 2
页:
[1]