Redis lists操作

list 是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等,操作中key理

解为链表的名字。 

Redis的list 类型其实就是一个每个子元素都是string类型的双向链表。链表的最大长度是(2

的32次方)。我们可以通过push,pop操作从链表的头部或者尾部添加删除元素。这使得list

既可以用作栈,也可以用作队列。 

有意思的是list 的pop操作还有阻塞版本的,当我们[lr]pop一个list 对象时,如果list 是空,

或者不存在,会立即返回nil。但是阻塞版本的b[lr]pop可以则可以阻塞,当然可以加超时时

间,超时后也会返回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

猜你喜欢

转载自wilian.iteye.com/blog/1568226
今日推荐